This repro is an experiment in IRIS-HEP analysis languages.
The code here will start from an ATLAS derivation (EXOT_15) and feed it into a BDT training that can differentiate between MJ background and long-lived particle signal in the jets. This is part of the CalRatio effort.
Goals:
Non-Goals:
Above all, this is an experiment. It is based off many things learned in the LINTQToROOT project.
Platform requirements:
vsyscall=emulate
to your kernel parameters at boot. If that doesn't work, make sure X86_VSYSCALL_EMULATION
is enabled in your kernel config.Tested on:
This will have to have C++ parts and Python (numpy) parts.
A new background is required to run on a different file. Or below the sheets, power it from a differet file format.
Implementing a new executor isn't terribly hard. Here is an untested outline of what must be done.
The system finds the proper backend code through the AST note that contans tje get_execcutor method. See the file xAODLib/AtlasEventStream.py
for this file.
This returns the executor found in the bottom of the atlas_xaod_executor.py
. This drives everything. Almost everything is done in the evaluate method (there are a bunch of helpers). There are two stages.
The qv.visit(ast) is the main line. This starts the traversal of the AST that we need to turn into code. The visitor is based on python
's ast.NodeVisitor
class. As it goes, it tracks what it is looking at. This is tricky. For example, how the SelectMany
node translates from a collection to a sequence of its items.
The output file is generated using the template engine jinj2
- though anything can be used.
Finally, the code is run in a docker container which maps a temp script directory and the directory containing the data file.
The results of this have to be given back to the calling source code. THis is currently a fake burried in the executor.