Problem loading TSelector class with TProof::Process()

Hi,

I compiled a selector class (inherits from TSelector) to be processed with proof. This class uses a Reflex dictionary.

The following command:

proof->Process(set_mc, “myClass”) ;

gives:

class myClass does not exist or does not derive from TSelector

Though, myClass exists, is loaded and derives from a TSelector, since the following works without problems:

proof->Exec(“TSelector* sel = TSelector::GetSelector(“myClass”)”) ;
proof->Exec(“sel->Version()”) ;

In addition, if I append kTRUE as the last argument of TProof::Exec(), which makes the command be executed on the master as well, then the command succeeds on the master, but no more on the workers.

Does anyone have any idea of what is going wrong?

Thanks in advance,
Philippe

Dear Philippe,

Can you specify which version of ROOT you are using and the exact way you load “myClass” ?

Also, are the master and workers on separated machines? Or do they share the working areas?

G. Ganis

Dear Gerri,

thanks for your reply.

I am using root version|rev|tag : 5.18/00d|r24036|5.20/00, as utilized in the current atlas software which I need for my application.
I am working in a homogeneous cluster of computers, which all have access to my working area, so that I don’t need to use PAR packages.

Even if I don’t explicitely load my library (“myLib”) containing “myClass”, proof seems to load it automatically, since the following works:
proof->Exec(“TSelector* sel = TSelector::GetSelector(“myClass”)”) ;
I have set up LD_LIBRARY_PATH on all workers to include the path to my library and its dictionary (by using the env variable PROOF_INITCMD), which might be the reason (can you confirm whether this is sufficient?).

However, I also explicitely loaded myLib (and additionally myLibDict) to be sure. I tried one of the following:
proof->Load(“path_to_myLib”)
proof->Exec(“gSystem->Load(“myLib.so”)”)

I also tried to load myLib by copying it (and its dictionary) in a PAR package and adding these lines in the SETUP() function of the SETUP.C script:
gSystem->Load(“myLib.so”)
gSystem->Load(“myLibDict.so”)

Whatever the method, the loading succeeds on all workers. I get 0 as returned value, for each worker, and no error message.

Since myClass uses a Reflex dictionary, I also ensured that libCintex is loaded (either with TProof::Load(), TProof::Exec(“gSystem->Load()”) or gSystem->Load() within the SETUP.C script) and Cintex::Enable() is called (with TProof::Exec() or gROOT->ProcessLine() in the SETUP.C script). Actually, libCintex was already loaded before in my program since the preceding loading commands returned 1.

Whatever I did to load myLib, the TProof::Process() method wasn’t able to recognize myClass. I saw that TProof::Process() calls TVirtualProofPlayer::Process(), in which TSelector::GetSelector() is called in order to compile the selector source or load the selector class. What puzzles me is that the following works:
proof->Exec(“TSelector* sel = TSelector::GetSelector(“myClass”)”) ;
but not:
proof->Process(set_mc, “myClass”)

I have no problem using a selector class the same way, when the ccorresponding library does not need a Reflex dictionary. Are there some limitations using Reflex with proof?

Cheers,
Philippe

Dear Philippe,

It is indeed puzzling that GetSelector works via TProof::Exec and not in a normal TProof::Process action.
I will try to reproduce the problem locally with your version and try to understand a bit better.

What error messages, if any, do you get in the logs on the workers?

Cheers, Gerri

Hi Gerri,

There are no error message except the following (what I called myClass is actually named “araProof” in my code):
Error in TSelector::GetSelector: class myClass does not exist or does not derive from TSelector

I attached the log of the master and workers (what I called myClass is actually named “araProof” in my code). I set up the log level on 7 and also executed the following before calling TProof::Process():
proof->Exec(“TSelector* sel = TSelector::GetSelector(“myClass”)”) ;
proof->Exec(“sel->Version()”) ;

Please let me know if you need more information from my side to try reproducing my issue.
Thanks for your help.

Cheers,
Philippe
log_aratest_4_all-workers.txt (7.97 KB)