ATLAS Offline Software
|
This package serves both as an example on how to perform data thinning and as a unit test, making sure everything is working as planned. It consists of 3 algorithms explaining how to perform thinning of DataVector
containers as a possible way of reducing disk size of a given dataset.
The AthExThinning package contains the following transient data classes:
AthExParticle
will be removed (aka "thinning")DataVector<AthExParticle>
. Hence it is a container of AthExParticle
. As said earlier, the thinning process will consist of removing some of the elements of this container.ElementLink
) to AthExParticle
(hold by an AthExParticles
container)ElementLink
towards certain elements of a given (or multiple) container of AthExParticles
.Then, a set of according persistent classes (ie: classes whose layout is optimized to be written on disk) have also been collected into this package:
AthExParticles
. There is no "rocket science" in this persistent representation (from a technical point of view), it is mostly to exercise the transient/persistent separation of data classes.AthExDecay
data class. Same comment as above holds.AthExElephantino
transient data class.Finally, there are 3 algorithms manipulating the above transient data classes :
AthExParticles
. Then it creates a AthExDecay
pointing to some of the previously created AthExParticles
. Finally a AthExElephantino
is created. All these data classes are put into StoreGate
through the StoreGateSvc
and scheduled to be written out on disk (into a POOL file).AthExParticles
and punches holes into that container. It shows the various methods to remove elements out of a container while keeping the ElementLink
pointing to other elements of this container, valid. Everything happens during the AthExThinning::WriteThinnedData::doThinning()
method. Eventually the thinned container is written out into a new POOL file.ElementLink
are still valid and pointing to the right elements.The other classes are the usual boiler plate needed to implement the transient/persistent separation: T/P serializers and AthenaPOOL converters. They are implementation details as far as this package is concerned.
Note however that only T/P separated classes can make use of the thinning process as it relies on the T/P separation of the ElementLink
to correct the persistent index (to the element in the persistent container) with the according offset, reflecting the removal of elements.