Classes to represent and to build physics objects
This is another step in the refactoring (shears#40 (closed)). All usual physics objects, such as muons or jets, are represented by dedicated classes. They are constructed by *Builder
classes. The construction is lazy and implemented with per-event caching, meaning that, for example, jets will only be constructed if they are actually used, and this will be done at maximum once per event, returning for each subsequent access a reference to the jet collection built earlier. Collections of objects are always sorted in pT, which before was not the case at least for electrons.
There are some changes to definitions of physics objects:
- A mistake in jet ID (#9 (closed)) is fixed.
- Soft muon ID is eliminated, and the loose ID is used for the veto instead.
- The veto for the EB-EE gap is only applied to tight electrons.
- Jets in simulation are smeared to account for the pT resolution in data.
- Changes in momenta of jets and muons are propagated into missing pT.
Systematic variations in JEC and JER are implemented (and propagated into missing pT as well).
Some old code is removed. There is no need for TLorentzVectorWithIndex
any more. Most functions in the namespace objectSelection
have been absorbed in the builders and therefore dropped.