![]() |
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.