Understanding Errors

At its heart, we are using func_adl to run C++. func_adl is an abstraction. And givin how complex ATLAS software is, the abstraction is bound to leak. One very messy place it leaks is when things go wrong. And it leaks in two ways.

  • The first way is that ServiceX is a distributed processing system. And collecting errors in an appropriate way from 100’s of processors is not trivial.

  • The second way it leaks is that when something goes wrong with the generated C++, ServiceX just passes back the error logs, leaving it up to the user. This section tries to list some of the errors that are seen, showing some examples, and also the appropriate course of action to take (or at least, root causes).

The error messages are very long, and depending on what platform you are viewing this file, it can be pretty overwhelming. All the errors here are shown when running the local version of ServiceX in a docker container. We always recommend doing this when faced with an error you can’t figure out from the distributed version - much faster to debug.

Note

Please do contact us with weird errors so we can add them here!

Warning

In this first version of the book we have not yet started to fill this out.

Asking for a Systematic Error that does not exist

Consider the following code:

# muons = (ds
#         .SelectMany(lambda e: e.Muons("Muons", calibration="MUON_ID__1up"))
#         .Select(lambda j: {
#             'pt': j.pt() / 1000.0,
#             'eta': j.eta(),
#             'phi': j.phi(),
#         })
#         .AsAwkwardArray()
#         .value())

Asking for something not present in your skim

The ATLAS data model is very flexible. While that brings a lot of power, it can also mean you run into unexpected problems whose cause isn’t transparent. For example, since you are dealing with C++ objects to extract data, and not directly with the data itself, you can ask for some data that doesn’t exist. The software will give you a pretty clear error.

Tracks are some of the larger objects in ATLAS data, and as a result, they are slimmed down. Here is an example of asking for something that does not exist: