LCOV - code coverage report
Current view: top level - HLT/BASE - AliHLTOUTHandlerEsdBranch.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 1 100.0 %
Date: 2016-06-14 17:26:59 Functions: 1 5 20.0 %

          Line data    Source code
       1             : //-*- Mode: C++ -*-
       2             : // $Id$
       3             : 
       4             : #ifndef ALIHLTOUTHANDLERESDBRANCH_H
       5             : #define ALIHLTOUTHANDLERESDBRANCH_H
       6             : //* This file is property of and copyright by the                          * 
       7             : //* ALICE Experiment at CERN, All rights reserved.                         *
       8             : //* See cxx source for full Copyright notice                               *
       9             : 
      10             : /// @file   AliHLTOUTHandlerEsdBranch.h
      11             : /// @author Matthias Richter
      12             : /// @date   01.07.2010
      13             : /// @brief  HLTOUT handler of type kEsd to merge objects into the hltEsd.
      14             : 
      15             : #include "AliHLTOUTHandler.h"
      16             : #include "TString.h"
      17             : 
      18             : class TArrayC;
      19             : class TObject;
      20             : class AliHLTEsdManager;
      21             : 
      22             : /**
      23             :  * @class AliHLTOUTHandlerEsdBranch
      24             :  * An HLTOUT handler of type kEsd to add objects to hltEsd branches.
      25             :  *
      26             :  * The handler extracts objects from HLTOUT data blocks or converts
      27             :  * data to objects to be added to hltEsd branches. The default implementation
      28             :  * covers the first case right away, the class can be used directly for single
      29             :  * objects streamed to the HLTOUT.
      30             :  *
      31             :  * <h2>Object conversion</h2>
      32             :  * The method ExtractAndAddObjects() has to loop over all input blocks and
      33             :  * provide an appropriate conversion. If the data block simply contains a
      34             :  * streamed object it just needs to be extracted and added to the ESD using
      35             :  * the function Add(). This case is covered by the default implementation.
      36             :  * Child classes can overload ExtractAndAddObjects() if there is further
      37             :  * conversion/formatting required.
      38             :  *
      39             :  * <h2>Usage example:</h2>
      40             :  * An agent implementation must announce to ability to process a certain
      41             :  * data block by implementing AliHLTModuleAgent::GetHandlerDescription()
      42             :  * and AliHLTModuleAgent::GetOutputHandler(). See AliHLTModuleAgent for
      43             :  * more details.
      44             :  * <pre>
      45             :  *  int AliHLTMyAgent::GetHandlerDescription(AliHLTComponentDataType dt,
      46             :  *                                           AliHLTUInt32_t spec,
      47             :  *                                           AliHLTOUTHandlerDesc& desc) const
      48             :  *  {
      49             :  *    // add TObject data blocks of type {ROOTTOBJ:SMPL} to ESD
      50             :  *    if (dt==(kAliHLTDataTypeTObject|kAliHLTDataOriginSample)) {
      51             :  *        desc=AliHLTOUTHandlerDesc(kEsd, dt, GetModuleId());
      52             :  *        return 1;
      53             :  *    }
      54             :  *  
      55             :  *    return 0;
      56             :  *  }
      57             :  *
      58             :  *  AliHLTOUTHandler* AliHLTMyAgent::GetOutputHandler(AliHLTComponentDataType dt,
      59             :  *                                                    AliHLTUInt32_t spec)
      60             :  *  {
      61             :  *   // merge my objects into the hltEsd
      62             :  *   if (dt==(kAliHLTDataTypeTObject|kAliHLTDataOriginSample)) {
      63             :  *     static AliHLTOUTHandlerEsdBranch handler;
      64             :  *     return &handler;
      65             :  *   }
      66             :  *
      67             :  *   return NULL;
      68             :  *  }
      69             :  * </pre>
      70             :  *
      71             :  * <h2>Data output</h2>
      72             :  * The handler produces a partial ESD containing the data objects. The framework
      73             :  * merges all the different partial ESDs in the AliHLTEsdManager, respectively the
      74             :  * specific implementation AliHLTEsdManagerImplementation.
      75             :  *
      76             :  * HLTOUT processing sequence:
      77             :  * - first handlers of type kChain
      78             :  * - handlers of type kEsd
      79             :  * - handlers of type kProprietary
      80             :  *
      81             :  * @ingroup alihlt_aliroot_reconstruction
      82             :  */
      83             : class AliHLTOUTHandlerEsdBranch : public AliHLTOUTHandler {
      84             :  public:
      85             :   /** constructor */
      86             :   AliHLTOUTHandlerEsdBranch(const char* branchname=NULL);
      87             :   /** standard destructor */
      88             :   virtual ~AliHLTOUTHandlerEsdBranch();
      89             : 
      90             :   /**
      91             :    * Process a data block.
      92             :    * @return 
      93             :    */
      94             :   int ProcessData(AliHLTOUT* pData);
      95             : 
      96             :   int GetProcessedData(const AliHLTUInt8_t* &pData);
      97             :   int ReleaseProcessedData(const AliHLTUInt8_t* pData, int size);
      98             : 
      99             :  protected:
     100             :   /**
     101             :    * Extract and add objects
     102             :    * Loop over input blocks and extract/format the objects. Child class
     103             :    * can implement specific conversion. The default implementation just
     104             :    * extracts and adds objects.
     105             :    */
     106             :   virtual int ExtractAndAddObjects(AliHLTOUT* pData);
     107             : 
     108             :  private:
     109             :   /** copy constructor prohibited */
     110             :   AliHLTOUTHandlerEsdBranch(const AliHLTOUTHandlerEsdBranch&);
     111             :   /** assignment operator prohibited */
     112             :   AliHLTOUTHandlerEsdBranch& operator=(const AliHLTOUTHandlerEsdBranch&);
     113             : 
     114             :   TString fBranch; //! transient
     115             :   TObject* fESD; //! transient
     116             :   TArrayC* fpData;  //! transient
     117             :   int fSize; //! transient
     118             :   AliHLTEsdManager* fManager; //! transient
     119             : 
     120         126 :   ClassDef(AliHLTOUTHandlerEsdBranch, 0)
     121             : };
     122             : #endif

Generated by: LCOV version 1.11