L1Calo Bytestream Decoding in ATHENA

This is a quick summary of the key features of the present bytestream decoding in ATHENA.

ATHENA Packages

There are two packages you need. At the moment, the latest versions are unfortunately not available from CVS. You will need to copy tarballs from whoever has the latest updates.

Trigger/TrigT1/TrigT1Result

This contains the L1Calo "Raw Data Objects" (RDOs) which are implemented as various subclasses of a base class L1CaloRdo. All objects are contained in a store of type L1CaloRdoStore. The decoding from ROD fragments to create the RDOs is done by the (templated) L1CaloBsDecoder class.

These classes are directly copied from the online bytestreamDecoder package with only two changes:

For more details and the API see the Doxygen documentation for the bytestreamDecoder package.

Trigger/TrigT1/TrigT1CaloTestBeam

This package contains two different things (which should probably be separated).

Bytestream Decoder Infrastructure

We use the simplest bytestream decoding infrastructure. This allows one ROD fragment to be converted to one object of one class and stored in StoreGate. Since we have four (might have been five) different types of ROD fragment, we needed to replicate the infrastructure five times.

For each fragment we have the following:

Using the Decoders

With all the above infrastructure in place, using the decoders is fairly simple. Just ask StoreGate for the key associated with the data you want. This returns a (smart) pointer to the corresponding L1CaloRdoStore subclass containing the L1CaloRdo objects decoded from the relevant ROD fragment.

  // Store Gate active store: in algorithm initialise() method.
  sc = serviceLocator()->service("ActiveStoreSvc", m_activeStore);
  if (sc.isFailure()) { // handle error }
  
  // Get store of CPM DAQ data from StoreGate
  const DataHandle myL1CaloRdoStoreCpmDaq;
  sc = (*m_activeStore)->retrieve(myL1CaloRdoStoreCpmDaq, "L1CaloRawDataCpmDaq");
  if (sc.isFailure()) { // handle error }
  
  // Use L1CaloRdoStore API to iterate over CPM DAQ data
  CpmTowerIter beginCT, endCT;
  myL1CaloRdoStoreCpmDaq->getCpmTowerIterators( beginCT, endCT );
  while ( beginCT != endCT ) { // analyse data }

Last updated on 14-October-2004. Send comments on this page to Murrough Landon