ATLAS Offline Software
Loading...
Searching...
No Matches
AthExThinning Package
Author
Sebastien Binet

Introduction

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.

Class Overview

The AthExThinning package contains the following transient data classes:

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_p1 : the persistent representation of the 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_p1 : the persistent representation of the AthExDecay data class. Same comment as above holds.
  • AthExElephantino_p1 : the persistent representation of the AthExElephantino transient data class.

Finally, there are 3 algorithms manipulating the above transient data classes :

  • AthExThinning::CreateData : a simple algorithm creating a container of 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).
  • AthExThinning::WriteThinnedData : this is the algorithm actually exercising the real thinning. It retrieves the previously created container of 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.
  • AthExThinning::ReadThinnedData : this is the algorithm reading back the thinned container, making sure that the removed elements are not in the container anymore and that the various 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.