Problems RooExpensiveObjectCache

Hello everybody!

I need to take some information from a workspace in a .root file but I have a problem when I try to read the file. I use ROOT on lxplus with python. I type:

f_in = ROOT.TFile("hzz4l_4eS_8TeV.input.root","READ")

and I get the following warning:

TStreamerInfo::BuildCheck:0: RuntimeWarning: 
   The StreamerInfo of class RooExpensiveObjectCache read from file hzz4l_4eS_8TeV.input.root
   has the same version (=2) as the active class but a different checksum.
   You should update the version to ClassDef(RooExpensiveObjectCache,3).
   Do not try to write objects with the current class definition,
   the files will not be readable.

TStreamerInfo::CompareContent:0: RuntimeWarning: The following data member of
the on-file layout version 2 of class 'RooExpensiveObjectCache' differs from 
the in-memory layout version 2:
   map<TString,ExpensiveObject*> _map; //
vs
   map<TString,RooExpensiveObjectCache::ExpensiveObject*> _map; /

I have absolutely no idea about the meaning of such warning and the problems that it will generate. Probably the root file was written using an older version of ROOT, but I do not how to fix the warning.
Could someone help me, please?

_ROOT Version: 6.12/07
_Platform: lxplus

Hello @Ale_olomorfo,

this happens since nested classes are now written to files with the name of the surrounding class. In the past, the name qualification was left out. I believe this was fixed in ROOT 6.16 or later.
Would you like to give it a try, e.g. with the default version of ROOT that’s on lxplus?

Hello @StephanH,

Thanks for the reply. I cannot use the default version of ROOT on lxplus (or at least I do not how to use it).
In the workspace there are RooDoubleCB, RooqqZZPdf_v2 and RooggZZPdf_v2 which are not defined in “standard” RooFit and I need to work in CMSSW framework which loads automatically ROOT 6.12/07. Otherwise I get the following error:

TClass::Init:0: RuntimeWarning: no dictionary for class RooDoubleCB is available
TClass::Init:0: RuntimeWarning: no dictionary for class RooqqZZPdf_v2 is available
TClass::Init:0: RuntimeWarning: no dictionary for class RooggZZPdf_v2 is available
Error in <TBufferFile::ReadObject>: trying to read an emulated class (RooDoubleCB) to store in a compiled pointer (TObject)
Error in <TBufferFile::ReadObject>: trying to read an emulated class (RooDoubleCB) to store in a compiled pointer (TObject)
Error in <TBufferFile::ReadObject>: trying to read an emulated class (RooDoubleCB) to store in a compiled pointer (TObject)

If I only try to load the .so file which sould have the aforementioned classes:

ROOT.gSystem.Load("$CMSSW_BASE/lib/$SCRAM_ARCH/libHiggsAnalysisCombinedLimit.so")

I get the following error:

cling::DynamicLibraryManager::loadLibrary(): libHistFactory.so: cannot open shared object file: No such file or directory

I’m stuck on this point, I’m trying to fix it.
Do you know a possible solution using ROOT 6.12/07?

Oh yes. This is because the default ROOT has no HistFactory. This one has:

source /cvmfs/sft.cern.ch/lcg/views/LCG_97/x86_64-centos7-gcc9-opt/setup.sh

This will give you ROOT 6.20.
I’m still not sure that you will be able to load the library, though, since there might be things that have changed between the ROOT versions. If that’s the case, you can walk back through LCG_xx releases until ROOT 6.16.

For earlier versions, you would have to compile ROOT manually, and apply this fix at the respective location:

I cannot guarantee, though, that this will work, since 6.12 isn’t supported, any more.

Hello @StephanH,

Thank you again!
I’ve tried as you suggested with different versions and I don’t have the same error, but another one (it is the same for all the versions I’ve tried):

cling::DynamicLibraryManager::loadLibrary(): libboost_filesystem.so.1.63.0: cannot open shared object file: No such file or directory

I’ve checked in /usr/lib64 and there is libboost_filesystem.so.1.53.0 indeed. Do you know how can I fix this problem, please?

I’m not aware that root uses boost_filesystem. That must be some other package that’s being set up either in other software you use or by the LCG setup.

It could work when setting up just the compiler and root:

source /cvmfs/sft.cern.ch/lcg/releases/gcc/9.2.0/x86_64-centos7/setup.sh
source /cvmfs/sft.cern.ch/lcg/releases/ROOT/v6.20.00-ddb2b/x86_64-centos7-gcc9-opt/bin/thisroot.sh

If the problem remains after this, it must be in other software that’s being used.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.