Jet Vertex Tagging with a NN
Thanks to the work of @anayaz (see ath_ttva_jvt), we have a trained NN that is capable of HS/PU discrimination. Training has been done with a MLP in SKLearn. On @dguests's recommendation, we use the lwtnn FastGraph interface.
This tool serves as a decorator for both the raw JVT value and a pass flag based on pt/eta-dependent cuts. The cuts and JVT NN configuration are defined in json files, initial versions of which are placed in my cernbox for testing, but which should eventually live in the calib area.
The tool will initialise with the cut values (which could be chosen to establish flat efficiency, flat rejection or any sort of gradations) and the NN configuration. It would then read input information from the jet container in order to compute the JVT discriminant. JVFCorr is provided by the JetVertexFractionTool, while sumPtTrk is used to calculate the Rpt value, which is decorated on the jet together with the JVT.
The kinematic validity is determined from the pt (20-200 GeV) and eta (-2.5-2.5) bin finding, and in addition a configurable upper pt cut, default 60 GeV, is applied. Jets outside this validity range are assigned a default JVT value and given a "pass" decoration.
An executable is provided for testing of the cut and NN json files, which need to be converted from sklearn joblib using the lwtnn converters:
- sklearn2json -- version from head needed
- sequential2graph
Opened for comments. Compilation has been tested. TODO:
- Add configuration support in JetRecConfig and test in Athena job
- Confirm initial NN and working point definitions for offline and HLT jets, place in CalibArea.
- Add more detailed commenting and instructions on generating inputs