Run a ROOT Script
It is also possible to set up ROOT, and run ROOT-based code on the grid.
First you should log out of lxplus, and then log back in. Create
a new directory in GridTutorial
:
mkdir RootGridTest
cd RootGridTest
setupATLAS
Next we will set up a standalone version of ROOT (and also the pandaclient tools). You can see which versions are available with:
lsetup 'root --help'
In our case, we will use the following version (see how we added
panda
as well, so that all steps are configured together):
lsetup "root 6.32.06-x86_64-el9-gcc13-opt" panda
Tip
It's good practice to set up all the tools you will need in one
go with lsetup
. The script has some built-in features that
let it gracefully handle conflicts and give you a fully-functional
environment.
Next we will create a simple macro to create a root file, create a histogram, fill the histogram with random values, and write the output.
Create a file called HistTest.C
and copy and paste the following
lines into it:
void HistTest() {
TFile * foo = TFile::Open("foo.root","recreate");
TH1D * h = new TH1D("h_gaus","h_gaus",30,-5,5);
TRandom3 rand(0);
for (unsigned int i=0; i< 100000; ++i) {
h->Fill(rand.Gaus(0.2,1.0));
}
h->Write();
foo->Close();
}
As usual, we check that the code runs normally first locally:
root -b -q HistTest.C
Tip
The -b
option in ROOT is for "batch mode", which turns off
graphics. The -q
option is for "quit", which makes it exit
after it has run the script.
You should see that a root file called foo.root
was created with
a single histogram.
We will now run the same command on the grid and retrieve the output into a rucio dataset.
Tip
Remove the local foo.root
before launching the job:
rm foo.root
It's generally good practice to have a very clean running area before you submit jobs to the grid, because all the files in your directory (with some exceptions) will be packed up and shipped to the grid.
Run the command:
prun --exec="root -b -q HistTest.C" --nJobs=1 --outputs=foo.root --outDS=user.$USER.prunroottest1 --rootVer=6.32.06 --cmtConfig=x86_64-el9-gcc13-opt
Be sure to replace $USER
if necessary.
We have added some arguments to the prun command: the root version and
config. This ensures that the same version of root is set up on
the grid worker node. Note that certain files (such as ROOT files -- e.g.,
foo.root
--) are not automatically uploaded to the grid with the grid job.
Tip
If you don't remove foo.root
before submitting your job, you will see
that prun
tells you it's ignoring the file: "skip root file ./foo.root"
Once the job completes, you should be able to use rucio to download the
dataset containing the root file output. Follow the same steps you did
in the previous section, and make sure you look for the output ending in
.root
instead of .tgz
.
Tip
PanDA has lots of handy options for controlling output. In this job we
told it to expect an output file called foo.root
. If we hadn't, or the
output had a different name, it might have packed it up in the log file
tarball that it saves with the job. When your job has many outputs, PanDA
also has options for splitting up the outputs into different datasets.
The documentation you can find on the website
and via the command line (prun --help
) is quite extensive.