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

#ifndef ALIHLTOFFLINEINTERFACE_H
#define ALIHLTOFFLINEINTERFACE_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   AliHLTOfflineInterface.h
/// @author Matthias Richter
/// @date   
/// @brief  the HLT interface to AliRoot
///

#include <TObject.h>
#include <TList.h>

class AliRunLoader;
class AliRawReader;
class AliESDEvent;
class TTree;

/******************************************************************************/

/**
 * @class AliHLTOfflineInterface
 * The class implements the basic interface to the AliRoot objects during
 * reconstructions.
 * It serves as a base class for offline source and sink interface components
 * and provides access methods for the AliRunLoader, AliRawReader and AliESDEvent
 * objects. The AliRunLoader and the AliRawReader are fixed during one run,
 * while the AliESDEvent object will be changed from event to event.<br>
 * \em Note: The digits and clusters trees are not available through this
 * interface class as they are completetly detector (AliLoader) dependend.
 *
 * @note This class is only used for the @ref alihlt_system.
 *
 * @ingroup alihlt_system
 */
class AliHLTOfflineInterface : public TObject {
 public:
  /** standard constructor */
  AliHLTOfflineInterface();
  /** constructor
   *  @param pRunLoader   pointer to AliRoot run loader
   *  @param pRawReader   pointer to AliRoot raw reader
   */
  AliHLTOfflineInterface(AliRunLoader* pRunLoader, AliRawReader* pRawReader);
  /** destructor */
  virtual ~AliHLTOfflineInterface();

  /**
   * Get the AliRoot run loader.
   */
  AliRunLoader* GetRunLoader() const;

  /**
   * Get the AliRoot raw reader
   */
  AliRawReader* GetRawReader() const;

  /**
   * Set AliRoot ESD for the current event.
   */
  int SetESD(Int_t eventNo, AliESDEvent* pESD);

  /**
   * Get the AliRoot ESD
   */
  AliESDEvent* GetESD() const;

  /**
   * Set AliRoot external params.
   *
   * @param runLoader     the AliRoot runloader
   * @param rawReader     the AliRoot RawReader
   * @return neg. error code if failed 
   */
  int SetParams(AliRunLoader* runLoader, AliRawReader* rawReader);

  /**
   * Reset AliRoot internal params.
   */
  int Reset();

  /**
   * Set AliRoot external params.
   * This method works on the global list.
   * @param runLoader     the AliRoot runloader
   * @param rawReader     the AliRoot RawReader
   * @return neg. error code if failed 
   */
  static int SetParamsToComponents(AliRunLoader* runLoader, AliRawReader* rawReader);

  /**
   * Fill ESD for one event.
   * Fill the ESD with the previously reconstructed data. It must be implmented
   * by the child class.
   * @param eventNo       event No. \em Note: this is an internal enumeration of the
   *                      processed events.
   * @param runLoader     the AliRoot runloader
   * @param esd           an AliESDEvent instance
   * @return neg. error code if failed 
   */
  virtual int FillESD(int eventNo, AliRunLoader* runLoader, AliESDEvent* esd)=0;

  /**
   * Fill ESD for one event.
   * The FillESD method of all active AliHLTOfflineDataSink's is called in
   * order to fill the ESD with the previously reconstructed data. This method
   * works on the global list.
   * @param eventNo       event No. \em Note: this is an internal enumeration of the
   *                      processed events.
   * @param runLoader     the AliRoot runloader
   * @param esd           an AliESDEvent instance
   * @return neg. error code if failed 
   */
  static int FillComponentESDs(int eventNo, AliRunLoader* runLoader, AliESDEvent* esd);

  /**
   * Reset AliRoot internal params of all active components.
   * This method works on the global list.
   */
  static int ResetComponents();

protected:
  /**
   * Register an OfflineInterface.
   * @param me            instance of AliHLTOfflineInterface
   * @return neg. error code if failed
   */
  static int Register(AliHLTOfflineInterface* me);

  /**
   * Unregister  an OfflineInterface.
   * @param me            instance of AliHLTOfflineInterface
   * @return neg. error code if failed
   */
  static int Unregister(AliHLTOfflineInterface* me);

 private:
  /** copy constructor prohibited */
  AliHLTOfflineInterface(const AliHLTOfflineInterface&);
  /** assignment operator prohibited */
  AliHLTOfflineInterface& operator=(const AliHLTOfflineInterface&);

  /** global AliRoot run loader instance (for all components) */
  static AliRunLoader* fgpRunLoader;                              //! transient
  /** global AliRoot raw reader instance (for all components) */
  static AliRawReader* fgpRawReader;                              //! transient

  /** private AliRoot run loader instance */
  AliRunLoader* fpRunLoader;                                      //! transient
  /** private AliRoot raw reader instance */
  AliRawReader* fpRawReader;                                      //! transient
  /** AliRoot HLT ESD instance */
  AliESDEvent* fpESD;                                                  //! transient

  /** the list of active interfaces */
  static AliHLTOfflineInterface* fgAnchor;                        //! transient

  /** next element in the list */
  AliHLTOfflineInterface* fpNext;                                 //! transient

  /** the current element */
  static AliHLTOfflineInterface* fgCurrent;                       //! transient

  /** number of interfaces */
  static int fgCount;                                             //! see above

  ClassDef(AliHLTOfflineInterface, 0);
};

#endif
 AliHLTOfflineInterface.h:1
 AliHLTOfflineInterface.h:2
 AliHLTOfflineInterface.h:3
 AliHLTOfflineInterface.h:4
 AliHLTOfflineInterface.h:5
 AliHLTOfflineInterface.h:6
 AliHLTOfflineInterface.h:7
 AliHLTOfflineInterface.h:8
 AliHLTOfflineInterface.h:9
 AliHLTOfflineInterface.h:10
 AliHLTOfflineInterface.h:11
 AliHLTOfflineInterface.h:12
 AliHLTOfflineInterface.h:13
 AliHLTOfflineInterface.h:14
 AliHLTOfflineInterface.h:15
 AliHLTOfflineInterface.h:16
 AliHLTOfflineInterface.h:17
 AliHLTOfflineInterface.h:18
 AliHLTOfflineInterface.h:19
 AliHLTOfflineInterface.h:20
 AliHLTOfflineInterface.h:21
 AliHLTOfflineInterface.h:22
 AliHLTOfflineInterface.h:23
 AliHLTOfflineInterface.h:24
 AliHLTOfflineInterface.h:25
 AliHLTOfflineInterface.h:26
 AliHLTOfflineInterface.h:27
 AliHLTOfflineInterface.h:28
 AliHLTOfflineInterface.h:29
 AliHLTOfflineInterface.h:30
 AliHLTOfflineInterface.h:31
 AliHLTOfflineInterface.h:32
 AliHLTOfflineInterface.h:33
 AliHLTOfflineInterface.h:34
 AliHLTOfflineInterface.h:35
 AliHLTOfflineInterface.h:36
 AliHLTOfflineInterface.h:37
 AliHLTOfflineInterface.h:38
 AliHLTOfflineInterface.h:39
 AliHLTOfflineInterface.h:40
 AliHLTOfflineInterface.h:41
 AliHLTOfflineInterface.h:42
 AliHLTOfflineInterface.h:43
 AliHLTOfflineInterface.h:44
 AliHLTOfflineInterface.h:45
 AliHLTOfflineInterface.h:46
 AliHLTOfflineInterface.h:47
 AliHLTOfflineInterface.h:48
 AliHLTOfflineInterface.h:49
 AliHLTOfflineInterface.h:50
 AliHLTOfflineInterface.h:51
 AliHLTOfflineInterface.h:52
 AliHLTOfflineInterface.h:53
 AliHLTOfflineInterface.h:54
 AliHLTOfflineInterface.h:55
 AliHLTOfflineInterface.h:56
 AliHLTOfflineInterface.h:57
 AliHLTOfflineInterface.h:58
 AliHLTOfflineInterface.h:59
 AliHLTOfflineInterface.h:60
 AliHLTOfflineInterface.h:61
 AliHLTOfflineInterface.h:62
 AliHLTOfflineInterface.h:63
 AliHLTOfflineInterface.h:64
 AliHLTOfflineInterface.h:65
 AliHLTOfflineInterface.h:66
 AliHLTOfflineInterface.h:67
 AliHLTOfflineInterface.h:68
 AliHLTOfflineInterface.h:69
 AliHLTOfflineInterface.h:70
 AliHLTOfflineInterface.h:71
 AliHLTOfflineInterface.h:72
 AliHLTOfflineInterface.h:73
 AliHLTOfflineInterface.h:74
 AliHLTOfflineInterface.h:75
 AliHLTOfflineInterface.h:76
 AliHLTOfflineInterface.h:77
 AliHLTOfflineInterface.h:78
 AliHLTOfflineInterface.h:79
 AliHLTOfflineInterface.h:80
 AliHLTOfflineInterface.h:81
 AliHLTOfflineInterface.h:82
 AliHLTOfflineInterface.h:83
 AliHLTOfflineInterface.h:84
 AliHLTOfflineInterface.h:85
 AliHLTOfflineInterface.h:86
 AliHLTOfflineInterface.h:87
 AliHLTOfflineInterface.h:88
 AliHLTOfflineInterface.h:89
 AliHLTOfflineInterface.h:90
 AliHLTOfflineInterface.h:91
 AliHLTOfflineInterface.h:92
 AliHLTOfflineInterface.h:93
 AliHLTOfflineInterface.h:94
 AliHLTOfflineInterface.h:95
 AliHLTOfflineInterface.h:96
 AliHLTOfflineInterface.h:97
 AliHLTOfflineInterface.h:98
 AliHLTOfflineInterface.h:99
 AliHLTOfflineInterface.h:100
 AliHLTOfflineInterface.h:101
 AliHLTOfflineInterface.h:102
 AliHLTOfflineInterface.h:103
 AliHLTOfflineInterface.h:104
 AliHLTOfflineInterface.h:105
 AliHLTOfflineInterface.h:106
 AliHLTOfflineInterface.h:107
 AliHLTOfflineInterface.h:108
 AliHLTOfflineInterface.h:109
 AliHLTOfflineInterface.h:110
 AliHLTOfflineInterface.h:111
 AliHLTOfflineInterface.h:112
 AliHLTOfflineInterface.h:113
 AliHLTOfflineInterface.h:114
 AliHLTOfflineInterface.h:115
 AliHLTOfflineInterface.h:116
 AliHLTOfflineInterface.h:117
 AliHLTOfflineInterface.h:118
 AliHLTOfflineInterface.h:119
 AliHLTOfflineInterface.h:120
 AliHLTOfflineInterface.h:121
 AliHLTOfflineInterface.h:122
 AliHLTOfflineInterface.h:123
 AliHLTOfflineInterface.h:124
 AliHLTOfflineInterface.h:125
 AliHLTOfflineInterface.h:126
 AliHLTOfflineInterface.h:127
 AliHLTOfflineInterface.h:128
 AliHLTOfflineInterface.h:129
 AliHLTOfflineInterface.h:130
 AliHLTOfflineInterface.h:131
 AliHLTOfflineInterface.h:132
 AliHLTOfflineInterface.h:133
 AliHLTOfflineInterface.h:134
 AliHLTOfflineInterface.h:135
 AliHLTOfflineInterface.h:136
 AliHLTOfflineInterface.h:137
 AliHLTOfflineInterface.h:138
 AliHLTOfflineInterface.h:139
 AliHLTOfflineInterface.h:140
 AliHLTOfflineInterface.h:141
 AliHLTOfflineInterface.h:142
 AliHLTOfflineInterface.h:143
 AliHLTOfflineInterface.h:144
 AliHLTOfflineInterface.h:145
 AliHLTOfflineInterface.h:146
 AliHLTOfflineInterface.h:147
 AliHLTOfflineInterface.h:148
 AliHLTOfflineInterface.h:149
 AliHLTOfflineInterface.h:150
 AliHLTOfflineInterface.h:151
 AliHLTOfflineInterface.h:152
 AliHLTOfflineInterface.h:153
 AliHLTOfflineInterface.h:154
 AliHLTOfflineInterface.h:155
 AliHLTOfflineInterface.h:156
 AliHLTOfflineInterface.h:157
 AliHLTOfflineInterface.h:158
 AliHLTOfflineInterface.h:159
 AliHLTOfflineInterface.h:160
 AliHLTOfflineInterface.h:161
 AliHLTOfflineInterface.h:162
 AliHLTOfflineInterface.h:163
 AliHLTOfflineInterface.h:164
 AliHLTOfflineInterface.h:165
 AliHLTOfflineInterface.h:166
 AliHLTOfflineInterface.h:167
 AliHLTOfflineInterface.h:168
 AliHLTOfflineInterface.h:169
 AliHLTOfflineInterface.h:170
 AliHLTOfflineInterface.h:171
 AliHLTOfflineInterface.h:172
 AliHLTOfflineInterface.h:173
 AliHLTOfflineInterface.h:174
 AliHLTOfflineInterface.h:175