Skip to content

Add zipping of SOA tracks + PV relations demonstrator

Olli Lupton requested to merge olupton_pv_relations into master

Along with LHCb!2095 (merged) and Moore!229 (merged), the main purpose here is to add zippable track->vertex relations and demonstrate using them in selections. The same tools can be used for muon ID etc.

In brief, this adds an SOA-friendly container-of-track-to-vertex-relations type that can be zipped with LHCb::Pr::*::Tracks containers, and some tests of the machinery. Most of the other changes are adding simple algorithms that are needed to put together a working configuration and making sure Zipping::ZipFamilyNumber and zipIdentifier() are used consistently everywhere.

Other tangential changes (could be put in a different MR if people have Opinions):

  • Implement @graven's suggestions in #80 (closed)
  • Add PrUpstreamFromVelo algorithm for feeding SciFiTrackForwarding with velo tracks
  • Make logical and/or in functor expressions short-circuit when cuts are vectorised

Full list of remaining changes:

  • Teach functor predicates how to filter LHCb::Pr::Zip objects
  • Generalise the functor predicate overload that already covered LHCb::Pr::{Velo,Fitted::Forward}::Tracks to one that filters anything accepted by LHCb::Pr::make_zip()
  • Move some helper functions (all( bool ), any( bool ), none( bool ), ...) that are needed when writing generic code into SelKernel and out of the functor code
  • Instantiate CombineTracks for track+relations zip input
  • Instantiate PrTracks for track+relations zip input -- in addition to a non-owning zip output of the same type as its input, it also puts the owning container behind this view on the TES
  • Add MakePVRelations algorithm that puts track->vertex relations on the TES
  • Add MakeZip algorithm that puts LHCb::Pr::make_zip output on the TES
  • Replace old MakeIterableTracks algorithm with Unwrap algorithm, which puts 'unwrapped' iterable tracks on the TES. This means that iterating yields a scalar proxy returning plain C++ data types (not SIMDWrapper::scalar::...) and Gaudi vector types (not Vec3<T>)
  • Add convenience typedefs like LHCb::Pr::Fitted::Forward::TracksWithPVs
Edited by Marco Cattaneo

Merge request reports