Proof fails with friends?


I’m trying to use proof to along with a tselector to loop through a ttree. I also include a branch from a friend tree that has been saved to the main trees friend list.

I run makeselector on the main tree (tree1) and then edit the tselector by setting up the addresses for the friend branch.

This works fine in root and the output is as expected:

root [0] TChain *c = new TChain("MeritTuple")
root [1] c->Add("tempo-test-data-00008_merit.root")
root [2] c->Process("MeritTuple.C")
Info in <TSelector::Process>: phase: 0.808585
Info in <TSelector::Process>: phase: 0.954120
Info in <TSelector::Process>: phase: 0.448698
Info in <TSelector::Process>: phase: 0.227906
Info in <TSelector::Process>: phase: 0.495401


However, when I try to do the same with PROOF I get the following output:

root [0] TProof *p=TProof::Open("")
 +++ Starting PROOF-Lite with 2 workers +++
Opening connections to workers: OK (2 workers)                 
Setting up worker servers: OK (2 workers)                 
PROOF set to parallel mode (2 workers)
root [1] TChain *c = new TChain("MeritTuple")
root [2] c->Add("tempo-test-data-00008_merit.root")
root [3] c->SetProof()
root [4] c->Process("MeritTuple.C")
Info in <TProofLite::SetQueryRunning>: starting query: 1
Looking up for exact location of files: OK (1 files)                 
Looking up for exact location of files: OK (1 files)                 
Info in <TPacketizerAdaptive::TPacketizerAdaptive>: Setting max number of workers per node to 2
Validating files: OK (1 files)                 
Info in <TPacketizerAdaptive::TPacketizerAdaptive>: fraction of remote files 1.000000
Info in <TProofLite::MarkBad>: 
 +++ Message from master at synchrotron.local : marking 0.0-synchrotron.local-1273465848-92582:-1 (0.0) as bad
 +++ Reason: undefined message in TProof::CollectInputFrom(...)

 +++ Most likely your code crashed
 +++ Please check the session logs for error messages either using
 +++ the 'Show logs' button or executing
 +++ root [] TProof::Mgr("synchrotron.local")->GetSessionLogs()->Display("*")

Do the slaves not know how to find the friend tree? The tree is in a separate file but in the same directory.


Dear funkslap9,

See .
I will try to investigate asap.

G. Ganis

Thanks ganis,

I have a bit of an update as well.

The files I had been using already had their friends written to the friendlist in a previous session. This does not work.

I grabbed a file without the friendlist saved and tried something new:

 TProof *p = TProof::Open("");
  TChain *c = new TChain("MeritTuple");

  TChain *cf = new TChain("MeritPhase");

  TDSet *tc = new TDSet(*c);

  TDSet *tcf = new TDSet(*cf);




This “appears” to work as far as I can tell.


If I do the same thing to the files with friends already associated with them from a previous session I get the error indicated above.

Does anyone know how to properly remove a friendlist?



I had a first look to the problem and it appears that there is fundamental problem in the way the friend list is transmitted to the workers. Basically, a class used by the tree-friend PROOF implementation does not have a proper streamer. The implementation was done many years ago and many thing have changed since then. So it is not totally surprising that there is a problem like that.

What is a bit more surprising is that you said that this

“appears to work”: what did that mean exactly? In the example ‘tcf’ is empty …

Anyhow, I will try to fix it asap.
The fix will probably be available sometime next week.

G. Ganis

This was a typo. Sorry. I added the friend file to this chain. It appeared to work in the sense that proof would not fail but the entries were zero. Anyhow, thanks! This will save a lot of headaches.


Can you send an update when this I implemented?


This should be now fixed in the trunk and in the 5-26-00-patches branch.
The trunk also contains a new tutorial to illustrate the use of friends in PROOF:
have a look at tutorials/proof/runProof.C, section ‘friends’ .

Let me know if you try.