I’ve submitted a related post today in the pyroot forum but I realize now this may be a better venue.
I’m trying to access (non-standard) objects stored in ROOT files but I receive the following error:
root [0] TFile *f = TFile::Open("file.root")
root [1] WSeries<double>* a=f->Get("data")
Error in <TBufferFile::CheckByteCount>: object of class WSeries<double> read too few bytes: 9363600 instead of 9365139
I write and read the file from different computers with different config.
Any suggestion to fix this error?
Thanks,
Eric
PS:
Write from the following config:
gcc (Debian 4.4.5-8) 4.4.5
root-v5-32-04.patched
Read from the following config:
gcc (Debian 4.9.1-19) 4.9.1
ROOT 5.34/19 (heads/v5-34-00-patches@v5-34-18-592-g34af149, Oct 24 2014, 14:06:00 on linuxx8664gcc)
I thought I may provide more information about my problem.
Here is the trace I get when I attempt to read from ROOT 5.34/19.
The same code do not segfault when executed in ROOT 5-32-04.patched
Any suggestion would be very welcome!
Eric
[code]root [0] TFile file = TFile::Open(“file.root”)
root [1] WSeries data=file->Get(“data”)
Error in TBufferFile::CheckByteCount: object of class WSeries read too few bytes: 9363600 instead of 9365139
root [2] data
(class WSeries*)0x14be6b0
root [3] data->sizeZero()
*** Break *** segmentation violation
===========================================================
There was a crash.
This is the entire stack trace of all threads:
#0 0x00007f8c7f29d14c in waitpid () from /lib/x86_64-linux-gnu/libc.so.6 #1 0x00007f8c7f22718b in ?? () from /lib/x86_64-linux-gnu/libc.so.6 #2 0x00007f8c801542cf in TUnixSystem::StackTrace() () from /usr/lib/x86_64-linux-gnu/libCore.so.5.34 #3 0x00007f8c8015653c in TUnixSystem::DispatchSignals(ESignals) () from /usr/lib/x86_64-linux-gnu/libCore.so.5.34 #4 #5 0x00007f8c76194f7b in G__wave_dict_648_0_32(G__value*, char const*, G__param*, int) () from /home/ecm/Notes/13chirp_cwb/watrepo/tools/install/lib/wavelet.so #6 0x00007f8c7e286c03 in Cint::G__ExceptionWrapper(int ()(G__value, char const*, G__param*, int), G__value*, char*, G__param*, int) () from /usr/lib/x86_64-linux-gnu/libCint.so.5.34 #7 0x00007f8c7e289074 in G__execute_call () from /usr/lib/x86_64-linux-gnu/libCint.so.5.34 #8 0x00007f8c7e28947c in G__call_cppfunc () from /usr/lib/x86_64-linux-gnu/libCint.so.5.34 #9 0x00007f8c7e25f8ad in G__interpret_func () from /usr/lib/x86_64-linux-gnu/libCint.so.5.34 #10 0x00007f8c7e22ed43 in G__getfunction () from /usr/lib/x86_64-linux-gnu/libCint.so.5.34 #11 0x00007f8c7e321941 in G__getstructmem(int, G__FastAllocString&, char*, int, char*, int*, G__var_array*, int) () from /usr/lib/x86_64-linux-gnu/libCint.so.5.34 #12 0x00007f8c7e317d4e in G__getvariable () from /usr/lib/x86_64-linux-gnu/libCint.so.5.34 #13 0x00007f8c7e33ac03 in G__getitem () from /usr/lib/x86_64-linux-gnu/libCint.so.5.34 #14 0x00007f8c7e3405f6 in G__getexpr () from /usr/lib/x86_64-linux-gnu/libCint.so.5.34 #15 0x00007f8c7e2ee5ab in G__exec_statement () from /usr/lib/x86_64-linux-gnu/libCint.so.5.34 #16 0x00007f8c7e210901 in ?? () from /usr/lib/x86_64-linux-gnu/libCint.so.5.34 #17 0x00007f8c7e211f1e in G__exec_tempfile_fp () from /usr/lib/x86_64-linux-gnu/libCint.so.5.34 #18 0x00007f8c7e2f9469 in G__process_cmd () from /usr/lib/x86_64-linux-gnu/libCint.so.5.34 #19 0x00007f8c8011b720 in TCint::ProcessLine(char const*, TInterpreter::EErrorCode*) () from /usr/lib/x86_64-linux-gnu/libCore.so.5.34 #20 0x00007f8c800b4ce7 in TApplication::ProcessLine(char const*, bool, int*) () from /usr/lib/x86_64-linux-gnu/libCore.so.5.34 #21 0x00007f8c7fceba18 in TRint::HandleTermInput() () from /usr/lib/x86_64-linux-gnu/libRint.so.5.34 #22 0x00007f8c80155c1d in TUnixSystem::CheckDescriptors() () from /usr/lib/x86_64-linux-gnu/libCore.so.5.34 #23 0x00007f8c8015687a in TUnixSystem::DispatchOneEvent(bool) () from /usr/lib/x86_64-linux-gnu/libCore.so.5.34 #24 0x00007f8c800d1004 in TSystem::InnerLoop() () from /usr/lib/x86_64-linux-gnu/libCore.so.5.34 #25 0x00007f8c800cfc41 in TSystem::Run() () from /usr/lib/x86_64-linux-gnu/libCore.so.5.34 #26 0x00007f8c800b263f in TApplication::Run(bool) () from /usr/lib/x86_64-linux-gnu/libCore.so.5.34 #27 0x00007f8c7fcecaac in TRint::Run(bool) () from /usr/lib/x86_64-linux-gnu/libRint.so.5.34 #28 0x0000000000400ff0 in main ()
The crash is most likely caused by a problem in your script.
Try to compile it (.L myscript.C+g) and fix any errors.
If that does not help then please submit a bug report at http://root.cern.ch/bugs. Please post the ENTIRE stack trace
from above as an attachment in addition to anything else
that might help us fixing this issue.[/code]
When I try to read the file generated with ROOT 5.34/19 with ROOT 5.32/04, I get a more informative
message:
Warning in <TStreamerInfo::BuildCheck>:
The StreamerInfo of class WSeries<double> read from file test_wdm2.root
has the same version (=1) as the active class but a different checksum.
You should update the version to ClassDef(WSeries<double>,2).
Do not try to write objects with the current class definition,
the files will not be readable.
Warning in <TStreamerInfo::CompareContent>: The following data member of
the on-file layout version 1 of class 'WSeries<double>' differs from
the in-memory layout version 1:
unsigned long w_mode; //
vs
size_t w_mode; //
However, I checked that the WSeries object is declared with
This is an improvement as I have now partial access to my object.
But that does not solve my problem entirely.
[quote]Error in TBufferFile::ReadVersion: Could not find the StreamerInfo with a checksum of 0x30000 for the class “Wavelet” in test_wdm.root.
Error in TBufferFile::ReadClassBuffer: Could not find the StreamerInfo for version 0 of the class Wavelet, object skipped at offset 262861
Error in TBufferFile::CheckByteCount: object of class WSeries read too few bytes: 262825 instead of 329122
[/quote]
Here, I don’t understand why Streamer v0 is required when I have
I attach the header files for both the WSeries and Wavelet classes.
Error in <TBufferFile::ReadVersion>: Could not find the StreamerInfo with a checksum of 0x30000 for the class "Wavelet" in test_wdm.root.humm … ReadVersion is confused on what it is reading … I would need a standalone reproducer to investigate this.
ClassDef(Wavelet,1)Since you changed the layout a bit (size_t vs ULong_t), you should also increment the version number.
[quote]I attach the header files for both the WSeries and Wavelet classes.[/quote]From the header file, I do not see the relationship between WSeries and Wavelet ; in particular the actually datatype for which the WSeries is instantiated.
From the header file, I do not see the relationship between WSeries and Wavelet ; in particular the actual
datatype for which the WSeries is instantiated.
wseries.hh
and WaveDWT (header attached) is derived from Wavelet
In my example, I instantiate a WSeries.
ReadVersion is confused on what it is reading … I would need a standalone reproducer to investigate this.
Here are the standalone scripts (source + binaries).
The compilation line is inserted in the source code (1st line).
They work when compiled against ROOT 5.32/04 :
===========================================================
There was a crash.
This is the entire stack trace of all threads:
#0 0x00007fd4240b414c in waitpid () from /lib/x86_64-linux-gnu/libc.so.6 #1 0x00007fd42403e18b in ?? () from /lib/x86_64-linux-gnu/libc.so.6 #2 0x00007fd4298ef2cf in TUnixSystem::StackTrace() () from /usr/lib/x86_64-linux-gnu/libCore.so.5.34 #3 0x00007fd4298f153c in TUnixSystem::DispatchSignals(ESignals) () from /usr/lib/x86_64-linux-gnu/libCore.so.5.34 #4 #5 0x0000000000400c10 in test_wdm() () #6 0x0000000000400c54 in main ()
The lines below might hint at the cause of the crash.
If they do not help you then please submit a bug report at http://root.cern.ch/bugs. Please post the ENTIRE stack trace
from above as an attachment in addition to anything else
that might help us fixing this issue.
#5 0x0000000000400c10 in test_wdm() () #6 0x0000000000400c54 in main ()