Sorry, a few things came up that required my attention. I now have a little more time to address issues with this part of the analysis.
My “random files” are a small subset of the monte carlo I’ll be running over. These ROOT files are real, stored on a physical disk which my user (and group) have access to.
If the PROOF-Lite workers are spawned as process threads using my user and/or group permissions, then the workers should be able to see the files. I understand that a full PROOF system may not do that; but PROOF-Lite runs locally (slaves on master).
I still have to check reducing the workers to 2, and reading the sessions logs.
I have tried both Info
and std::clog
; I can understand the former being remapped, but the second not so much.
I have std::clog
pointing to an std::ofstream
when testing. The only reason I can see it not keeping that is if the workers are created in a completely separate session, and do not share that state with the master; and using the default std::clog::rdbuf
which should point to stderr
or stdout
depending on the compiler implementation.
I am creating a standalone execcutable, compiled against ROOT libraries (ensuring -lProof
, as root-config --libs
does not include that library.
I’m executing PROOF in the following way:
TChain chain(file_args.tree.c_str());
fill_chain(file_args.fileset, chain);
struct selection const selection = { 5500.0, { 5.4, 9.0 }, 0.8 };
selector select(&selection);
if (file_args.proof.use) {
TProof::Open(file_args.proof.url.c_str());
chain.SetProof(true);
}
chain.Process(&select);
if (file_args.proof.use)
chain.SetProof(false);
Where selector
is my class inheriting from TSelector
, which takes a pointer to a struct selection
; it’s a struct over a class as I do not need methods (and a struct is just a public class in C++), and it’s not just the values themselves for quick ease, grouping together, and I intend to extend to generating them.
I have a set of parsed command line arguments, which are used containing the tree name, set of files, etc.
The file_args.proof.url
is by default an empty string, therefore TProof::Open(file_args.proof.url.c_str());
is equivelent to TProof::Open("");
which runs PROOF-Lite, locally, but allows a user to give a PROOF url on the command line if they wish.
I don’t know what you need to know about the selector itself, though I wrote it from scratch using the documentation, I used the pregenerated TTree::MakeSelector
code to check against (which itself didn’t work with PROOF).
I’m using 5.34/36; but that shouldn’t make too much difference to how this works to my understanding.
(I’m still in the process of making our codebase a little more compatable with C++11 and ROOT 6, so I can either use TTreeReader
or this niceTDataFrame
interface)