Accelerate your analysis with ServiceX

Select and transform large datasets into analysis-ready data using Python.

pip install servicex

Simplify your analysis code

Analyze data without writing or building C++ code, reducing tech debt and startup time. A single Python query produces analysis-ready histogram data with minimal environment setup.

uproot_raw_query = query.UprootRaw([{
    'treename': 'reco',
    'filter_name': [
        "truth_alp_decayVtxX",
        "truth_alp_decayVtxY",
        "truth_alp_pt",
        "jet_pt_NOSYS",
    ],
    'cut': '(num(jet_pt_NOSYS)<2) & any((truth_alp_pt>20)',
}])
Histogram of decay vertex displacement produced from the NTuple query

Transfer far less data

ServiceX applies your branch selection and your event cuts where the data already lives. Only what you asked for is sent back, so a dataset measured in terabytes arrives as something you can hold on a laptop.

That means less time waiting on transfers, less local storage, and no separate skimming step to maintain.

Full dataset on the grid 100%
Branches you selected ~10%
Delivered after your cuts ~3%

Illustrative. How much you save depends on how many branches your analysis touches and how tight your cuts are.

Inspect a dataset without downloading it

Checking whether a dataset actually contains the branch you need normally means pulling a file off the grid first. get_structure() asks ServiceX for the file structure instead, and returns the branches and their types. No event data is read and nothing lands on your disk.

You can filter to the branches you care about, print the result, save it to a text file, or ask for ak.Array types back for programmatic checks. Results are cached, so a second look is much faster.

python
from servicex_analysis_utils import get_structure

get_structure(
    "mc23_13TeV:some-dataset-rucio-id",
    filter_branch="jet_",
    do_print=True,
)
shell
servicex-get-structure "scope:dataset-id" --filter_branch "el_"

What you get

Python, not C++

Write your selection in Python. There is no framework to build and no compile step to wait on.

Modular backends

Raw Uproot, a plain Python function, or FuncADL, pick the transformer that suits your data; the delivery workflow does not change.

Cached transformations

Repeat a request and ServiceX returns the cached result rather than redoing the transformation.

Standard output formats

Results come back as Parquet, ROOT TTree, or RNTuple, written to a local cache.

From install to histogram in 15 minutes

The 15-Minute Histogram Challenge walks you from a fresh environment to a plotted result.