ROOT logo
//-*- Mode: C++ -*-
// $Id$

#ifndef ALIHLTPROCESSOR_H
#define ALIHLTPROCESSOR_H
///* This file is property of and copyright by the                          * 
///* ALICE Experiment at CERN, All rights reserved.                         *
///* See cxx source for full Copyright notice                               *

/// @file   AliHLTProcessor.h
/// @author Matthias Richter, Timm Steinbeck
/// @date   
/// @brief  Base class declaration for HLT analysis components.
///

#include "AliHLTComponent.h"

/**
 * @class AliHLTProcessor
 * Base class of HLT data analysis components.
 * The class provides a common interface for the implementation of HLT data
 * analysis components. The child class must implement the functions:
 * - @ref DoInit (optional)
 * - @ref DoDeinit (optional)
 * - @ref DoEvent
 * - @ref GetComponentID
 * - @ref GetInputDataTypes
 * - @ref GetOutputDataType
 * - @ref GetOutputDataSize
 * - @ref Spawn
 *
 * @ingroup alihlt_component
 */
class AliHLTProcessor : public AliHLTComponent {
 public:
  /** standard constructor */
  AliHLTProcessor();
  /** standard destructor */
  virtual ~AliHLTProcessor();

  /**
   * Event processing function.
   * The method is called by the framework to process one event. After 
   * preparation of data structures. The call is redirected to DoEvent.
   * @return neg. error code if failed 
   */
  int DoProcessing( const AliHLTComponentEventData& evtData,
		    const AliHLTComponentBlockData* blocks, 
		    AliHLTComponentTriggerData& trigData,
		    AliHLTUInt8_t* outputPtr, 
		    AliHLTUInt32_t& size,
		    AliHLTComponentBlockDataList& outputBlocks,
		    AliHLTComponentEventDoneData*& edd );

  // Information member functions for registration.

  /**
   * Return @ref AliHLTComponent::kProcessor type as component type.
   * @return component type id
   */
  TComponentType GetComponentType() { return AliHLTComponent::kProcessor;}

 protected:
  /**
   * The low-level data processing method for the component.
   * This is the custom processing method and can be overloaded by 
   * the component.
   * @param [in] evtData       event data structure
   * @param [in] blocks        input data block descriptors
   * @param [in] trigData	  trigger data structure
   * @param [in] outputPtr	  pointer to target buffer
   * @param [in,out] size	  <i>input</i>: size of target buffer
   *            	  <i>output</i>:size of produced data
   * @param [in] outputBlocks  list to receive output block descriptors
   * @return neg. error code if failed                                <br>
   *         -ENOSPC      output buffer too small
   */
  virtual int DoEvent( const AliHLTComponentEventData& evtData,
		       const AliHLTComponentBlockData* blocks, 
		       AliHLTComponentTriggerData& trigData,
		       AliHLTUInt8_t* outputPtr, 
		       AliHLTUInt32_t& size,
		       AliHLTComponentBlockDataList& outputBlocks );

  /**
   * The high-level data processing method.
   * This is the default processing method; the method is called
   * if no low level @ref DoEvent method is overloaded by the component.
   * @param evtData       event data structure
   * @param trigData	  trigger data structure
   * @return neg. error code if failed
   */
  virtual int DoEvent( const AliHLTComponentEventData& evtData, AliHLTComponentTriggerData& trigData);

  // collection of debug counters
  struct AliHLTProcessorCounters {
    AliHLTProcessorCounters() : fReadoutFilter(0), fMonitoringFilter(0), fMonitoringEvent(0), fMismatch(0) {}
    int fReadoutFilter;    // counter for the EDD readout filter
    int fMonitoringFilter; // counter for the EDD monitoring filter
    int fMonitoringEvent;  // counter for the EDD monitoring event
    int fMismatch;         // counter for EDD format mismatch
  };

private:
  /// copy contructor prohibited
  AliHLTProcessor(const AliHLTProcessor&);
  /// assignment operator prohibited
  AliHLTProcessor& operator=(const AliHLTProcessor&);

  AliHLTProcessorCounters* fpDebugCounters; // optional debugging counters

  ClassDef(AliHLTProcessor, 2)
};
#endif
 AliHLTProcessor.h:1
 AliHLTProcessor.h:2
 AliHLTProcessor.h:3
 AliHLTProcessor.h:4
 AliHLTProcessor.h:5
 AliHLTProcessor.h:6
 AliHLTProcessor.h:7
 AliHLTProcessor.h:8
 AliHLTProcessor.h:9
 AliHLTProcessor.h:10
 AliHLTProcessor.h:11
 AliHLTProcessor.h:12
 AliHLTProcessor.h:13
 AliHLTProcessor.h:14
 AliHLTProcessor.h:15
 AliHLTProcessor.h:16
 AliHLTProcessor.h:17
 AliHLTProcessor.h:18
 AliHLTProcessor.h:19
 AliHLTProcessor.h:20
 AliHLTProcessor.h:21
 AliHLTProcessor.h:22
 AliHLTProcessor.h:23
 AliHLTProcessor.h:24
 AliHLTProcessor.h:25
 AliHLTProcessor.h:26
 AliHLTProcessor.h:27
 AliHLTProcessor.h:28
 AliHLTProcessor.h:29
 AliHLTProcessor.h:30
 AliHLTProcessor.h:31
 AliHLTProcessor.h:32
 AliHLTProcessor.h:33
 AliHLTProcessor.h:34
 AliHLTProcessor.h:35
 AliHLTProcessor.h:36
 AliHLTProcessor.h:37
 AliHLTProcessor.h:38
 AliHLTProcessor.h:39
 AliHLTProcessor.h:40
 AliHLTProcessor.h:41
 AliHLTProcessor.h:42
 AliHLTProcessor.h:43
 AliHLTProcessor.h:44
 AliHLTProcessor.h:45
 AliHLTProcessor.h:46
 AliHLTProcessor.h:47
 AliHLTProcessor.h:48
 AliHLTProcessor.h:49
 AliHLTProcessor.h:50
 AliHLTProcessor.h:51
 AliHLTProcessor.h:52
 AliHLTProcessor.h:53
 AliHLTProcessor.h:54
 AliHLTProcessor.h:55
 AliHLTProcessor.h:56
 AliHLTProcessor.h:57
 AliHLTProcessor.h:58
 AliHLTProcessor.h:59
 AliHLTProcessor.h:60
 AliHLTProcessor.h:61
 AliHLTProcessor.h:62
 AliHLTProcessor.h:63
 AliHLTProcessor.h:64
 AliHLTProcessor.h:65
 AliHLTProcessor.h:66
 AliHLTProcessor.h:67
 AliHLTProcessor.h:68
 AliHLTProcessor.h:69
 AliHLTProcessor.h:70
 AliHLTProcessor.h:71
 AliHLTProcessor.h:72
 AliHLTProcessor.h:73
 AliHLTProcessor.h:74
 AliHLTProcessor.h:75
 AliHLTProcessor.h:76
 AliHLTProcessor.h:77
 AliHLTProcessor.h:78
 AliHLTProcessor.h:79
 AliHLTProcessor.h:80
 AliHLTProcessor.h:81
 AliHLTProcessor.h:82
 AliHLTProcessor.h:83
 AliHLTProcessor.h:84
 AliHLTProcessor.h:85
 AliHLTProcessor.h:86
 AliHLTProcessor.h:87
 AliHLTProcessor.h:88
 AliHLTProcessor.h:89
 AliHLTProcessor.h:90
 AliHLTProcessor.h:91
 AliHLTProcessor.h:92
 AliHLTProcessor.h:93
 AliHLTProcessor.h:94
 AliHLTProcessor.h:95
 AliHLTProcessor.h:96
 AliHLTProcessor.h:97
 AliHLTProcessor.h:98
 AliHLTProcessor.h:99
 AliHLTProcessor.h:100
 AliHLTProcessor.h:101
 AliHLTProcessor.h:102
 AliHLTProcessor.h:103
 AliHLTProcessor.h:104
 AliHLTProcessor.h:105
 AliHLTProcessor.h:106
 AliHLTProcessor.h:107
 AliHLTProcessor.h:108
 AliHLTProcessor.h:109
 AliHLTProcessor.h:110
 AliHLTProcessor.h:111
 AliHLTProcessor.h:112
 AliHLTProcessor.h:113
 AliHLTProcessor.h:114