Metadata not available in RDFs event loop

HI,

I have a problem working with the RDataSetSpec and RSample. At lxplus, both lxplus7 and lxplus9, I Always get the following error when running my RDF:

RDataFrame::Run: event loop was interrupted
Traceback (most recent call last):
  File "/afs/cern.ch/user/j/jdegens/private/dihiggs/HHARD/analyses/bbttManager.py", line 81, in <module>
    analysis_manager.run_analyses_local()  # runs all rdf simultaneously
  File "/afs/cern.ch/user/j/jdegens/private/dihiggs/HHARD/python/AnalysisManager.py", line 27, in timeit_wrapper
    result = func(*args, **kwargs)
  File "/afs/cern.ch/user/j/jdegens/private/dihiggs/HHARD/python/AnalysisManager.py", line 127, in run_analyses_local
    R.RDF.RunGraphs(dfs)
cppyy.gbl.std.logic_error: void ROOT::RDF::RunGraphs(vector<ROOT::RDF::RResultHandle>) =>
    logic_error: RSampleInfo: sample data was requested but no samples are available. 

in my code I define a like this:

        self.meta = R.RDF.Experimental.RMetaData()
        self.get_number_of_events()

        self.meta.Add("name", f"{self.name}")
        self.meta.Add("isMC", f"{self.isMC}")
        self.meta.Add("totalEventsWeighted", float(self.totalEventsWeighted))
        self.meta.Add("CrossSection", float(self.dsid_metadata['CrossSection']))
        self.meta.Add("genFiltEff", float(self.dsid_metadata['genFiltEff']))
        self.meta.Add("kFactor", float(self.dsid_metadata['kFactor']))
        self.meta.Add("RunPeriod", self.run_period)
        lumi = self.get_lumi(self.run_period)
        self.meta.Add("lumi", float(lumi))
        R.RDF.Experimental.RSample(f"{self.name}", self.ntuple, self.files, self.meta)

later in the code I use the DefinePerSample method to access them.

self.dfs[dfname] = self.dfs[dfname].DefinePerSample("totalEventsWeighted", 'rdfsampleinfo_.GetD("totalEventsWeighted")')

The same code works on my local cluster running centos. I in principle use the same cvfms compiled version of root and I dont see any reason why it doesn’t work on lxplus. Removing the DefinePerSample call seems to “make it work”, so it must be something going wrong here

I can access the samples and their metadata directly in the code via:

x = self.datasetspec.rdatasetspec.GetMetaData()
print(x[0].Dump("lumi"))
print(self.datasetspec.rdatasetspec.GetSampleNames())

which gives me the expected results

36646.74
{ "HH_bbtt_top_mc_20a" }

Do you have any idea why this is happening?

thanks a lot,
Jordy

Welcome to the ROOT forum.

I guess @vpadulan can help you.

Hi Jordi,

I am sorry to hear you experience this issue. I would like to ask you, if you can, to share the ROOT version you are using and how you are setting it up (e.g. own build, LCG release, experiment stack).
There is something I do not get though: I understand that you are using the same ROOT installation, both on the university cluster and the lxplus, but you encounter the error only on CERN’s infrastructure.
Before diving in ROOT code proper, are there perhaps fundamental differences in the two infrastructures we are overlooking?

Cheers,
D

Hi Danilo,

We managed to “fix” the issue. The issue was related to eos. Here we changed the path such that it was preceded with root://eosuser.cern.ch/. So we changed the path from /eos/path/to/file.root to
root://eosuser.cern.ch//eos/path/to/file.root

Is this something you are aware of? If not, maybe this requires a fix from your side or a comment in the tutorials?

Anyways it seems to work now.

Cheers,
Jordy

Hi Jordy,

Happy to see you managed to make progress!

This is not something that depends on ROOT, but rather on EOS. To be more precise, the fuse client of it.
What you did in your code is to read the file via XRootD rather than as a local file through the EOS fuse mount.

I hope this clarifies the situation.

Cheers,
D

Hi Danilo,

Okay that makes sense. Do I need to follow this up with someone from EOS?

Cheers,
Jordy

Hi Jordy,

I suppose this is a temporary glitch, but your call.

Thanks for the patience!

Cheers,
D