Replacement for TTreeFormulaObservable
The TTreeFormula Observable is currently largely our workhorse for anythings that can be expressed as a simple expression based on quantities available in the input. It does have severe limitations and drawbacks though:
- TTreeFormulas still use the old Root5 TFormula(_v5) internally which has known issues including wrong results in some special cases.
- expressions are c++ -like but can't rely fully on proper c++
- especially for xAODs we can only use objects directly which are in the input xAOD even though, e.g. Algorithms could be used to dynamically inject objects such as EventCandidates with on-the-fly corrected/modified constituents, different object ordering, ...
- the TransientTrees used with xAODs tend to take a lot of memory and (at least in the past) seemed to be involved in strange and unresolved memory leaks.
Likely there are some additional shortcomings I'm currently missing. In any case we should make use of more up-to-date features and replace the TTreeFormula with some basic Cling based evaluation. A proof-of-principle how this could be accomplished can be found in https://gitlab.cern.ch/rgugel/formulasviacling