Add zipping of SOA tracks + PV relations demonstrator
The main change here is to generalise the IterablePODTracks
wrapper (and associated proxies) that was used to loop over/apply selections to LHCb::Pr::*::Tracks
objects into LHCb::Pr::Zip
, which can take multiple containers and yields proxies that can access fields from all of them:
ContainerA a{...};
ContainerB b{...};
auto zip = LHCb::Pr::make_zip( a, b );
for ( auto const& chunk : zip ) {
// chunk is a vector-register-sized chunk of elements
chunk.something_from_a() + chunk.something_from_b();
}
It can also be used to make a filtered copy:
// this copies the selected objects, 'copy' does not refer back to 'zip', 'a' or 'b'
// it contains elements from both 'a' and 'b'
auto copy = zip.filter( []( auto const& chunk ) { chunk.pt() > 400.f; } );
// make_zip() with a single argument is still useful to make an iterable, non-owning view
auto iterable = LHCb::Pr::make_zip( copy );
Along with Rec!1678 (merged) and Moore!229 (merged) this MR uses this tool to make track->PV relations, zip them to tracks, and use the resulting zip as input to the 1-track and 2-track MVA lines. This was the simplest test-case, muon ID is probably a more useful one.
Full list of changes:
- Add
zipIdentifier()
methods returningZipping::ZipFamilyNumber
to several classes (some previously had nothing, some previously had a temporaryfamily()
method returningunsigned short
) - Add
Foo( Zipping::ZipFamilyNumber, Foo const& )
constructors needed byzip.filter( ... )
to several containers - Move proxy definitions out of the generic
PrZip.h
and intoPrIterable{Velo,FittedForward}Tracks.h
- Minor tweaks in SIMDWrapper (cc: @ahennequ):
- Reorganise
popcount( mask_v )
definitions so they can be found by ADL - Add some
operator<<( std::ostream& os, ... )
definitions for debugging convenience - Add
LHCb::type_map
entries (see below) -
lb-format
is responsible for the whitespace changes...
- Reorganise
- Add
LHCb::type_map<T>
helper to allow generic code to ask "what is the integer type that goes with this floating point type" when the types involved may be plain C++ ones or SIMDWrapper ones - Minor changes to SOAExtensions (cc: @pseyfert):
- Make
Zipping::generateZipIdentifier()
part of the public interface - Add
operator<<( std::ostream& os, Zipping::ZipFamilyNumber )
- Make semantic checks conditional on
ZIPPING_SEMANTIC_CHECKS
instead ofNDEBUG
so it is easier to turn them on/off. Turn them on in-opt
builds, unlike before.
- Make
Merge request reports
Activity
mentioned in merge request Rec!1678 (merged)
mentioned in merge request Moore!229 (merged)
added 1 commit
- ece1b1b8 - Move helper functions and remove SelKernel dependency.
added 1 commit
- 13e20bfd - Fix compilation error hidden behind an ifdef.
mentioned in merge request !2086 (merged)
- [2019-09-05 00:08] Validation started with lhcb-tdr-test#663
- [2019-09-06 00:09] Validation started with lhcb-tdr-test#664
- [2019-09-07 00:08] Validation started with lhcb-tdr-test#665
- [2019-09-08 00:13] Validation started with lhcb-tdr-test#666
- [2019-09-09 00:11] Validation started with lhcb-tdr-test#667
- [2019-09-09 18:46] Validation started with lhcb-gaudi-merge#815
- [2019-09-10 00:04] Validation started with lhcb-gauss-dev#2133
- [2019-09-10 00:06] Validation started with lhcb-lcg-dev3#1015
- [2019-09-10 00:06] Automatic merge failed in lhcb-gaudi-head#2380
- [2019-09-10 00:07] Validation started with lhcb-head#2362
- [2019-09-10 00:07] Validation started with lhcb-test-throughput2#147
- [2019-09-10 00:09] Validation started with lhcb-lcg-dev4#1024
- [2019-09-10 00:09] Validation started with lhcb-tdr-test#668
- [2019-09-10 00:09] Validation started with lhcb-sanitizers#366
Edited by Software for LHCbadded 1 commit
- c89ad74d - Fix SIMDWrapper::scalar::mask_v overload of the logical negation operator.
mentioned in commit 3678ff32
mentioned in merge request !2111 (merged)
mentioned in merge request !2156 (merged)
mentioned in issue #121 (closed)