Task #14060
Milestone #14047: Data product review ("phase II")
Provide ways to navigate associated data products in a seamless way
100%
Description
As the physics reconstruction proceeds, more and more relations are expressed between different reconstructed components.
The same is true for the relations between reconstructed objects and simulated ones.
This yields a fragmented view of a single physics object. Fragmentation is increased when separating information of the same physics object into different data products (see issue #14059).
This fragmentation needs to be smoothed by an interface that "talks physics language".
This task is made of two parts:
- design of a general approach to the problem and a generic solution
- design and implementation of this solution for specific data products
Subtasks
Related issues
Associated revisions
History
#1 Updated by Gianluca Petrillo over 4 years ago
- Related to Task #14059: Provide means to extend data product information added
#2 Updated by Gianluca Petrillo over 4 years ago
- Precedes Task #14061: Provide an interface to access a complete reconstruction of the event added
#3 Updated by Gianluca Petrillo over 4 years ago
- Status changed from New to Assigned
#4 Updated by Katherine Lato over 3 years ago
Note, we are narrowing the scope of this item to just focus on phase 2 for the track. So rejecting (without prejudice) a subtask and creating a new subtask.
#5 Updated by Gianluca Petrillo over 3 years ago
The proposed solution is an object called "proxy".
The proxy backbone is a single data product (e.g. a std::vector<recob::Track>
), into which additional data products connected by associations can be merged.
The syntax looks like:
auto clusters = proxy::getCollection<std::vector<recob::Cluster>>(event, clusterTag, proxy::withAssociated<recob::Hit>(clusterHitTag));
(this example expects a art::Assns<recob::Cluster, recob::Hit>
data product with label@clusterHitTag@ to exist).The proxy object
clusters
can be iterated or accessed by index, and the corresponding element auto cluster = clusters[iTrack];
will make the objects associated to that cluster only, like in cluster.get<recob::Hit>()
.
Proxies can be customised; for example, the proxy for tracks, identified by recob::Tracks
, implicitly merges the associated hits, and they are accessible from a hits()
method:
auto tracks = proxy::getCollection<proxy::Tracks>(event, trackTag);
// ...
auto track = tracks[iTrack];
for (auto hit: track.hits()) { /* ... */ }
The code is available in feature/gp_TrackProxy
of lardata
and will be merged in LArSoft v06_51_00
.
#6 Updated by Gianluca Petrillo over 3 years ago
- Status changed from Assigned to Resolved
#7 Updated by Gianluca Petrillo over 3 years ago
- Target version changed from 2017-1-quarter to v06_51_00
Documentation in Doxygen form will be available in the "proxies" group of the modules section.
#8 Updated by Gianluca Petrillo about 3 years ago
- Status changed from Resolved to Closed
Merge branch 'feature/gp_TrackProxy' into develop
This concludes the commits for resolution of issue #14059, issue #14060
and issue #17359.