I am attempting to use PROOF on a small test cluster of SL3 machines, using ROOT version 5.11.06 compiled from source using the following configure command:
Additionally, I commented out line 1575 of TFile.cxx before compiling:
With this setup, I can add a .root file containing a TTree object from d-cache to a TChain, and process it using a TSelector in a local session:
root  TChain *chain = new TChain("h1") root  chain->Add("dcache:/pnfs/cms/WAX/resilient/jforbes/data_04p_47010_47139.root") (Int_t)1 root  chain->Process("Analyzer.C") (Long64_t)0
I can run over the same data file using PROOF, if I read the data from a local disk. I cannot, however, use PROOF to process the chain if I read the file from d-cache:
root  TChain *chain = new TChain("h1") root  chain->Add("dcache:/pnfs/cms/WAX/resilient/jforbes/data_04p_47010_47139.root") (Int_t)1 root  gROOT->Proof("lpcdt003") ... root  chain->SetProof() Error in <TDSet>: Error getting a tree header Error in <TDChain>: can't set PROOF root  chain->Process("Analyzer.C") (Long64_t)0
Note: PROOF starts up normally except for a number of complaints that it can’t locate libProofx. This is because I disabled xrootd when I configured ROOT, but PROOF seems to work just fine despite these messages, when running on data from a local disk.
Although the chain is, in fact, processed, it only runs on the local machine, as opposed to the PROOF cluster.
So: is it necessary for TChainProof::MakeChainProof to get a tree header (some of the comments in older versions of the source code seemed to indicate not)? Or is there a different/better way to go about using PROOF than with chain->SetProof() ?
BTW, I am using LibDCAP version 1-2-35.