Hello Philippe,
sorry for long message, but very soon na60 shall start large data
processing, and I want to be sure in my code...
On Mon, 29 Mar 2004, Philippe Canal wrote:
> > But I noticed that even in this case the TClonesArrays were recreated
> > at every GetEntry()
>
> This is surprising. Could you send me your current code?
>
I attach the toy version of na60's digit's storage: when TestGen and
TestReadWrite are called with first non-zero parameter, one branch
per TClonesArray is created, otherwise the data is stored in old mode:
single TObjArray of TClonesArrays...
My aim is to convert our old trees to new format:
1) I generate the old tree:
root [0] .L TestDigit1.cxx+
root [1] TestGen(0,"test0.root")
Write in OLD format: Single Branch/Detector
Event 0
Col# 0 Row# 3 | Digit# 0 of Sensor 0 | In Clus# -1, Track Ptr: (nil) |
Col# 1 Row# 18 | Digit# 1 of Sensor 0 | In Clus# -1, Track Ptr: (nil) |
Col# 10 Row# 10 | Digit# 0 of Sensor 1 | In Clus# -1, Track Ptr: (nil) |
Col# 11 Row# 4 | Digit# 1 of Sensor 1 | In Clus# -1, Track Ptr: (nil) |
Event 1
Col# 100 Row# 9 | Digit# 0 of Sensor 0 | In Clus# -1, Track Ptr: (nil) |
Col# 110 Row# 1 | Digit# 0 of Sensor 1 | In Clus# -1, Track Ptr: (nil) |
Input: -------------------------------------------
N/A
Output: -------------------------------------------
Old Detector branch: detBranch, Address: 0x414c101c AutoDelete: 1
State of sensor arrays:
Name: sens0, Size: 10 Last: 0
Name: sens1, Size: 10 Last: 0
root [2] .q
2) I read this tree and rewrite it in a new format
root [0] .L TestDigit1.cxx+
root [1] TestReadWrite(1,"test0.root","test01.root")
Write in NEW format: Detector is split in 1 branch/sensor
Read OLD format: Single Branch/Detector
Event 0
Read 255 bytes
Col# 0 Row# 3 | Digit# 0 of Sensor 0 | In Clus# -1, Track Ptr: (nil) |
Col# 1 Row# 18 | Digit# 1 of Sensor 0 | In Clus# -1, Track Ptr: (nil) |
Col# 10 Row# 10 | Digit# 0 of Sensor 1 | In Clus# -1, Track Ptr: (nil) |
Col# 11 Row# 4 | Digit# 1 of Sensor 1 | In Clus# -1, Track Ptr: (nil) |
Wrote 218 bytes
Event 1
Read 203 bytes
Col# 100 Row# 9 | Digit# 0 of Sensor 0 | In Clus# -1, Track Ptr: (nil) |
Col# 110 Row# 1 | Digit# 0 of Sensor 1 | In Clus# -1, Track Ptr: (nil) |
Wrote 166 bytes
Input: -------------------------------------------
Old Detector branch: detBranch, Address: 0x414c101c AutoDelete: 1
Output: -------------------------------------------
New Sensor branch: sens0, Address: 0x414c3ce4 AutoDelete: 1
New Sensor branch: sens1, Address: 0x414c3ce8 AutoDelete: 1
State of sensor arrays:
Name: sens0, Size: 1 Last: 0
Name: sens1, Size: 1 Last: 0
root [2] .q
3) Now I can read the tree in a new format:
root [0] .L TestDigit1.cxx+
root [1] TestRead("test01.root")
Read NEW format: Detector is split in 1 branch/sensor
Event 0
Read 218 bytes
Col# 0 Row# 3 | Digit# 0 of Sensor 0 | In Clus# -1, Track Ptr: (nil) |
Col# 1 Row# 18 | Digit# 1 of Sensor 0 | In Clus# -1, Track Ptr: (nil) |
Col# 10 Row# 10 | Digit# 0 of Sensor 1 | In Clus# -1, Track Ptr: (nil) |
Col# 11 Row# 4 | Digit# 1 of Sensor 1 | In Clus# -1, Track Ptr: (nil) |
Event 1
Read 166 bytes
Col# 100 Row# 9 | Digit# 0 of Sensor 0 | In Clus# -1, Track Ptr: (nil) |
Col# 110 Row# 1 | Digit# 0 of Sensor 1 | In Clus# -1, Track Ptr: (nil) |
Input: -------------------------------------------
New Sensor branch: sens0, Address: 0x414c3ce4 AutoDelete: 1
New Sensor branch: sens1, Address: 0x414c3ce8 AutoDelete: 1
Output: -------------------------------------------
N/A
State of sensor arrays:
Name: sens0, Size: 1 Last: 0
Name: sens1, Size: 1 Last: 0
root [2] .q
As you can see, the 2 input branches for tclonesarrays have AutoDelete set on, and the arrays
themselves were regenarated: after the last reading their size is equal to number of digits in
the last event. But it startes to reuse the initial arrays provided I set AutoDelete off:
root [0] .L TestDigit1.cxx+
root [1] NoAuto = 1;
root [2] TestRead("test01.root")
Read NEW format: Detector is split in 1 branch/sensor
Event 0
Read 218 bytes
Col# 0 Row# 3 | Digit# 0 of Sensor 0 | In Clus# -1, Track Ptr: (nil) |
Col# 1 Row# 18 | Digit# 1 of Sensor 0 | In Clus# -1, Track Ptr: (nil) |
Col# 10 Row# 10 | Digit# 0 of Sensor 1 | In Clus# -1, Track Ptr: (nil) |
Col# 11 Row# 4 | Digit# 1 of Sensor 1 | In Clus# -1, Track Ptr: (nil) |
Event 1
Read 166 bytes
Col# 100 Row# 9 | Digit# 0 of Sensor 0 | In Clus# -1, Track Ptr: (nil) |
Col# 110 Row# 1 | Digit# 0 of Sensor 1 | In Clus# -1, Track Ptr: (nil) |
Input: -------------------------------------------
New Sensor branch: sens0, Address: 0x414c3ce4 AutoDelete: 0
New Sensor branch: sens1, Address: 0x414c3ce8 AutoDelete: 0
Output: -------------------------------------------
N/A
State of sensor arrays:
Name: sens0, Size: 10 Last: 0
Name: sens1, Size: 10 Last: 0
Now it looks fine, the sizes of arrays are equal to initial ones.
---------------
Now concerning the bug in TStreamerInfo: the previous examples were with version 1 of the NaDigit1D
class. If I now uncomment STOREFULLINFO in TestDigit1.h, and try to rewrite a tree with OLD branch with
NaDigit1D verison 1 as a tree with NEW branches and NaDigit1D version 2, I am able to write it:
root [0] .L TestDigit1.cxx+
root [1] TestReadWrite(1,"test0.root","test01c2.root")
Write in NEW format: Detector is split in 1 branch/sensor
Read OLD format: Single Branch/Detector
Event 0
Read 255 bytes
Col# 0 Row# 3 | Digit# 0 of Sensor 0 | In Clus# -1, Track Ptr: (nil) | X: 0.0 Y: 0.0 Z: 0.0 E: 0.0
Col# 1 Row# 18 | Digit# 1 of Sensor 0 | In Clus# -1, Track Ptr: (nil) | X: 0.0 Y: 0.0 Z: 0.0 E: 0.0
Col# 10 Row# 10 | Digit# 0 of Sensor 1 | In Clus# -1, Track Ptr: (nil) | X: 0.0 Y: 0.0 Z: 0.0 E: 0.0
Col# 11 Row# 4 | Digit# 1 of Sensor 1 | In Clus# -1, Track Ptr: (nil) | X: 0.0 Y: 0.0 Z: 0.0 E: 0.0
Wrote 282 bytes
Event 1
Read 203 bytes
Col# 100 Row# 9 | Digit# 0 of Sensor 0 | In Clus# -1, Track Ptr: (nil) | X: 0.0 Y: 0.0 Z: 0.0 E: 0.0
Col# 110 Row# 1 | Digit# 0 of Sensor 1 | In Clus# -1, Track Ptr: (nil) | X: 0.0 Y: 0.0 Z: 0.0 E: 0.0
Wrote 198 bytes
Input: -------------------------------------------
Old Detector branch: detBranch, Address: 0x414c101c AutoDelete: 1
Output: -------------------------------------------
New Sensor branch: sens0, Address: 0x414c3e44 AutoDelete: 1
New Sensor branch: sens1, Address: 0x414c3e48 AutoDelete: 1
State of sensor arrays:
Name: sens0, Size: 1 Last: 0
Name: sens1, Size: 1 Last: 0
root [2] .q
but when I am reading it back it still misses the offsets:
root [0] .L TestDigit1.cxx+
root [1] NoAuto = 1;
root [2] TestRead("test01c2.root")
Read NEW format: Detector is split in 1 branch/sensor
Event 0
Read 282 bytes
Col# 0 Row# 3 | Digit# 0 of Sensor 0 | In Clus# 18, Track Ptr: (nil) | X: 0.0 Y: 0.0 Z: 0.0 E: 0.0
Col# 1 Row# -1 | Digit# 1 of Sensor 0 | In Clus# -1, Track Ptr: (nil) | X: 0.0 Y: 0.0 Z: 0.0 E: 0.0
Col# 10 Row# 10 | Digit# 0 of Sensor 1 | In Clus# 4, Track Ptr: (nil) | X: 0.0 Y: 0.0 Z: 0.0 E: 0.0
Col# 11 Row# -1 | Digit# 1 of Sensor 1 | In Clus# -1, Track Ptr: (nil) | X: 0.0 Y: 0.0 Z: 0.0 E: 0.0
Event 1
Read 198 bytes
Col# 100 Row# 9 | Digit# 0 of Sensor 0 | In Clus# -1, Track Ptr: (nil) | X: 0.0 Y: 0.0 Z: 0.0 E: 0.0
Col# 110 Row# 1 | Digit# 0 of Sensor 1 | In Clus# -1, Track Ptr: (nil) | X: 0.0 Y: 0.0 Z: 0.0 E: 0.0
Input: -------------------------------------------
New Sensor branch: sens0, Address: 0x414c3e44 AutoDelete: 0
New Sensor branch: sens1, Address: 0x414c3e48 AutoDelete: 0
Output: -------------------------------------------
N/A
State of sensor arrays:
Name: sens0, Size: 10 Last: 0
Name: sens1, Size: 10 Last: 0
root [3] .q
Cheers,
Ruben
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:07 MET