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")
(Int_t)1
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
etc.
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")
(Int_t)1
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.
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.
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.
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’ .