ROOT logo
// $Id$

//**************************************************************************
//* This file is property of and copyright by the                          * 
//* ALICE Experiment at CERN, All rights reserved.                         *
//*                                                                        *
//* Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no>        *
//*                  for The ALICE HLT Project.                            *
//*                                                                        *
//* Permission to use, copy, modify and distribute this software and its   *
//* documentation strictly for non-commercial purposes is hereby granted   *
//* without fee, provided that the above copyright notice appears in all   *
//* copies and that both the copyright notice and this permission notice   *
//* appear in the supporting documentation. The authors make no claims     *
//* about the suitability of this software for any purpose. It is          *
//* provided "as is" without express or implied warranty.                  *
//**************************************************************************/

/// @file   AliHLTOfflineInterface.cxx
/// @author Matthias Richter
/// @date   
/// @brief  the HLT interface to AliRoot
///

#include "AliHLTOfflineInterface.h"
#include "AliHLTLogging.h"

/** ROOT macro for the implementation of ROOT specific class methods */
ClassImp(AliHLTOfflineInterface)

AliHLTOfflineInterface::AliHLTOfflineInterface()
  :
  fpRunLoader(NULL),
  fpRawReader(NULL),
  fpESD(NULL),
  fpNext(NULL)
{
  // 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.
}

AliHLTOfflineInterface* AliHLTOfflineInterface::fgAnchor=NULL;
AliHLTOfflineInterface* AliHLTOfflineInterface::fgCurrent=NULL;
int AliHLTOfflineInterface::fgCount=0;
AliRunLoader* AliHLTOfflineInterface::fgpRunLoader=NULL;
AliRawReader* AliHLTOfflineInterface::fgpRawReader=NULL;

AliHLTOfflineInterface::AliHLTOfflineInterface(AliRunLoader* pRunLoader, AliRawReader* pRawReader)
  :
  fpRunLoader(pRunLoader),
  fpRawReader(pRawReader),
  fpESD(NULL),
  fpNext(NULL)
{
  // constructor
}

AliHLTOfflineInterface::~AliHLTOfflineInterface()
{
  // destructor
}

AliRunLoader* AliHLTOfflineInterface::GetRunLoader() const
{
  // set RawReader pointer
  return fpRunLoader!=NULL?fpRunLoader:fgpRunLoader;
}

AliRawReader* AliHLTOfflineInterface::GetRawReader() const
{
  // get RawReader pointer
  return fpRawReader!=NULL?fpRawReader:fgpRawReader;
}

int AliHLTOfflineInterface::SetESD(Int_t /*eventNo*/, AliESDEvent* pESD)
{
  // set ESD pointer
  fpESD=pESD;
  return 0;
}

AliESDEvent* AliHLTOfflineInterface::GetESD() const
{
  // get ESD pointer
  return fpESD;
}

int AliHLTOfflineInterface::SetParams(AliRunLoader* runLoader, AliRawReader* rawReader)
{
  // set parameters of the interface
  int iResult=0;
  if (fpRunLoader!=NULL && fpRunLoader!=runLoader) {
    //HLTWarning("overriding previous instance of Run Loader %p with %p", fpRunLoader, runLoader);
  }
  fpRunLoader=runLoader;
  if (fpRawReader!=NULL && fpRawReader!=rawReader) {
    //HLTWarning("overriding previous instance of RawReader %p with %p", fpRawReader, rawReader);
  }
  fpRawReader=rawReader;
  return iResult;
}

int AliHLTOfflineInterface::Reset()
{
  // see header file for class documentation
  int iResult=0;
  fpRunLoader=NULL;
  fpRawReader=NULL;
  fpESD=NULL;
  return iResult;
}

int AliHLTOfflineInterface::SetParamsToComponents(AliRunLoader* runLoader, AliRawReader* rawReader)
{
  // pass parameters to registered components
  AliHLTLogging log;
  int iResult=0;
  int count=0;
  fgpRunLoader=runLoader;
  fgpRawReader=rawReader;
  AliHLTOfflineInterface* pCurrent=fgAnchor;
  while (pCurrent!=NULL) {
    int iLocal=0;
    if (pCurrent) iLocal=pCurrent->SetParams(runLoader, rawReader);
    if (iLocal<0) {
      log.LoggingVarargs(kHLTLogWarning, "AliHLTOfflineInterface","SetParamsToComponents", __FILE__, __LINE__,
			"parameter initialization failed for component %p with result %d", pCurrent, iLocal);
      if (iResult>=0) iResult=iLocal;
    }
    count++;
    pCurrent=pCurrent->fpNext;
  }
  if (iResult>=0) {
//       log.LoggingVarargs(kHLTLogInfo, "AliHLTOfflineInterface","SetParamsToComponents", __FILE__, __LINE__,
// 			"parameters set to %d offline interface component(s)", count);
  }
  return iResult;
}

int AliHLTOfflineInterface::ResetComponents()
{
  // loop over registered components and call Reset
  int iResult=0;
  AliHLTOfflineInterface* pCurrent=fgAnchor;
  while (pCurrent!=NULL) {
    int iLocal=0;
    if (pCurrent) iLocal=pCurrent->Reset();
    if (iLocal<0) {
      if (iResult>=0) iResult=iLocal;
    }
    pCurrent=pCurrent->fpNext;
  }
  return iResult;
}

int AliHLTOfflineInterface::FillComponentESDs(int eventNo, AliRunLoader* runLoader, AliESDEvent* esd)
{
  // loop ove registered components and call FillESD function
  int iResult=0;
  AliHLTOfflineInterface* pCurrent=fgAnchor;
  while (pCurrent!=NULL) {
    int iLocal=0;
    if (pCurrent) {
      pCurrent->SetESD(eventNo, esd);
      if (pCurrent->GetRunLoader()!=runLoader) {
	//HLTWarning("runLoader mismatch: component %p was reconstructed with runLoader %p, but got %p now", pCurrent, pCurrent->GetRunLoader(), runLoader);
      }
      iLocal=pCurrent->FillESD(eventNo, runLoader, esd);
    }
    if (iLocal<0) {
      if (iResult>=0) iResult=iLocal;
    }
    pCurrent=pCurrent->fpNext;
  }
  return iResult;
}

int AliHLTOfflineInterface::Register(AliHLTOfflineInterface* me)
{
  // register a component in the list of offline interface components
  int iResult=0;
  if (fgAnchor==NULL) {
    fgAnchor=me;
  } else {
    me->fpNext=fgAnchor;
    fgAnchor=me;
  }
  fgCount++;
  return iResult;
}

int AliHLTOfflineInterface::Unregister(AliHLTOfflineInterface* me)
{
  // remove a component from the list
  int iResult=0;
  fgCurrent=NULL;
  AliHLTOfflineInterface* prev=NULL;
  AliHLTOfflineInterface* handler=fgAnchor;
  while (handler!=NULL && handler!=me) {
    prev=handler;
    handler=handler->fpNext;
  }
  if (handler) {
    if (prev==NULL) {
      fgAnchor=handler->fpNext;
    } else {
      prev->fpNext=handler->fpNext;
    }
    fgCount--;
  }
  return iResult;
}
 AliHLTOfflineInterface.cxx:1
 AliHLTOfflineInterface.cxx:2
 AliHLTOfflineInterface.cxx:3
 AliHLTOfflineInterface.cxx:4
 AliHLTOfflineInterface.cxx:5
 AliHLTOfflineInterface.cxx:6
 AliHLTOfflineInterface.cxx:7
 AliHLTOfflineInterface.cxx:8
 AliHLTOfflineInterface.cxx:9
 AliHLTOfflineInterface.cxx:10
 AliHLTOfflineInterface.cxx:11
 AliHLTOfflineInterface.cxx:12
 AliHLTOfflineInterface.cxx:13
 AliHLTOfflineInterface.cxx:14
 AliHLTOfflineInterface.cxx:15
 AliHLTOfflineInterface.cxx:16
 AliHLTOfflineInterface.cxx:17
 AliHLTOfflineInterface.cxx:18
 AliHLTOfflineInterface.cxx:19
 AliHLTOfflineInterface.cxx:20
 AliHLTOfflineInterface.cxx:21
 AliHLTOfflineInterface.cxx:22
 AliHLTOfflineInterface.cxx:23
 AliHLTOfflineInterface.cxx:24
 AliHLTOfflineInterface.cxx:25
 AliHLTOfflineInterface.cxx:26
 AliHLTOfflineInterface.cxx:27
 AliHLTOfflineInterface.cxx:28
 AliHLTOfflineInterface.cxx:29
 AliHLTOfflineInterface.cxx:30
 AliHLTOfflineInterface.cxx:31
 AliHLTOfflineInterface.cxx:32
 AliHLTOfflineInterface.cxx:33
 AliHLTOfflineInterface.cxx:34
 AliHLTOfflineInterface.cxx:35
 AliHLTOfflineInterface.cxx:36
 AliHLTOfflineInterface.cxx:37
 AliHLTOfflineInterface.cxx:38
 AliHLTOfflineInterface.cxx:39
 AliHLTOfflineInterface.cxx:40
 AliHLTOfflineInterface.cxx:41
 AliHLTOfflineInterface.cxx:42
 AliHLTOfflineInterface.cxx:43
 AliHLTOfflineInterface.cxx:44
 AliHLTOfflineInterface.cxx:45
 AliHLTOfflineInterface.cxx:46
 AliHLTOfflineInterface.cxx:47
 AliHLTOfflineInterface.cxx:48
 AliHLTOfflineInterface.cxx:49
 AliHLTOfflineInterface.cxx:50
 AliHLTOfflineInterface.cxx:51
 AliHLTOfflineInterface.cxx:52
 AliHLTOfflineInterface.cxx:53
 AliHLTOfflineInterface.cxx:54
 AliHLTOfflineInterface.cxx:55
 AliHLTOfflineInterface.cxx:56
 AliHLTOfflineInterface.cxx:57
 AliHLTOfflineInterface.cxx:58
 AliHLTOfflineInterface.cxx:59
 AliHLTOfflineInterface.cxx:60
 AliHLTOfflineInterface.cxx:61
 AliHLTOfflineInterface.cxx:62
 AliHLTOfflineInterface.cxx:63
 AliHLTOfflineInterface.cxx:64
 AliHLTOfflineInterface.cxx:65
 AliHLTOfflineInterface.cxx:66
 AliHLTOfflineInterface.cxx:67
 AliHLTOfflineInterface.cxx:68
 AliHLTOfflineInterface.cxx:69
 AliHLTOfflineInterface.cxx:70
 AliHLTOfflineInterface.cxx:71
 AliHLTOfflineInterface.cxx:72
 AliHLTOfflineInterface.cxx:73
 AliHLTOfflineInterface.cxx:74
 AliHLTOfflineInterface.cxx:75
 AliHLTOfflineInterface.cxx:76
 AliHLTOfflineInterface.cxx:77
 AliHLTOfflineInterface.cxx:78
 AliHLTOfflineInterface.cxx:79
 AliHLTOfflineInterface.cxx:80
 AliHLTOfflineInterface.cxx:81
 AliHLTOfflineInterface.cxx:82
 AliHLTOfflineInterface.cxx:83
 AliHLTOfflineInterface.cxx:84
 AliHLTOfflineInterface.cxx:85
 AliHLTOfflineInterface.cxx:86
 AliHLTOfflineInterface.cxx:87
 AliHLTOfflineInterface.cxx:88
 AliHLTOfflineInterface.cxx:89
 AliHLTOfflineInterface.cxx:90
 AliHLTOfflineInterface.cxx:91
 AliHLTOfflineInterface.cxx:92
 AliHLTOfflineInterface.cxx:93
 AliHLTOfflineInterface.cxx:94
 AliHLTOfflineInterface.cxx:95
 AliHLTOfflineInterface.cxx:96
 AliHLTOfflineInterface.cxx:97
 AliHLTOfflineInterface.cxx:98
 AliHLTOfflineInterface.cxx:99
 AliHLTOfflineInterface.cxx:100
 AliHLTOfflineInterface.cxx:101
 AliHLTOfflineInterface.cxx:102
 AliHLTOfflineInterface.cxx:103
 AliHLTOfflineInterface.cxx:104
 AliHLTOfflineInterface.cxx:105
 AliHLTOfflineInterface.cxx:106
 AliHLTOfflineInterface.cxx:107
 AliHLTOfflineInterface.cxx:108
 AliHLTOfflineInterface.cxx:109
 AliHLTOfflineInterface.cxx:110
 AliHLTOfflineInterface.cxx:111
 AliHLTOfflineInterface.cxx:112
 AliHLTOfflineInterface.cxx:113
 AliHLTOfflineInterface.cxx:114
 AliHLTOfflineInterface.cxx:115
 AliHLTOfflineInterface.cxx:116
 AliHLTOfflineInterface.cxx:117
 AliHLTOfflineInterface.cxx:118
 AliHLTOfflineInterface.cxx:119
 AliHLTOfflineInterface.cxx:120
 AliHLTOfflineInterface.cxx:121
 AliHLTOfflineInterface.cxx:122
 AliHLTOfflineInterface.cxx:123
 AliHLTOfflineInterface.cxx:124
 AliHLTOfflineInterface.cxx:125
 AliHLTOfflineInterface.cxx:126
 AliHLTOfflineInterface.cxx:127
 AliHLTOfflineInterface.cxx:128
 AliHLTOfflineInterface.cxx:129
 AliHLTOfflineInterface.cxx:130
 AliHLTOfflineInterface.cxx:131
 AliHLTOfflineInterface.cxx:132
 AliHLTOfflineInterface.cxx:133
 AliHLTOfflineInterface.cxx:134
 AliHLTOfflineInterface.cxx:135
 AliHLTOfflineInterface.cxx:136
 AliHLTOfflineInterface.cxx:137
 AliHLTOfflineInterface.cxx:138
 AliHLTOfflineInterface.cxx:139
 AliHLTOfflineInterface.cxx:140
 AliHLTOfflineInterface.cxx:141
 AliHLTOfflineInterface.cxx:142
 AliHLTOfflineInterface.cxx:143
 AliHLTOfflineInterface.cxx:144
 AliHLTOfflineInterface.cxx:145
 AliHLTOfflineInterface.cxx:146
 AliHLTOfflineInterface.cxx:147
 AliHLTOfflineInterface.cxx:148
 AliHLTOfflineInterface.cxx:149
 AliHLTOfflineInterface.cxx:150
 AliHLTOfflineInterface.cxx:151
 AliHLTOfflineInterface.cxx:152
 AliHLTOfflineInterface.cxx:153
 AliHLTOfflineInterface.cxx:154
 AliHLTOfflineInterface.cxx:155
 AliHLTOfflineInterface.cxx:156
 AliHLTOfflineInterface.cxx:157
 AliHLTOfflineInterface.cxx:158
 AliHLTOfflineInterface.cxx:159
 AliHLTOfflineInterface.cxx:160
 AliHLTOfflineInterface.cxx:161
 AliHLTOfflineInterface.cxx:162
 AliHLTOfflineInterface.cxx:163
 AliHLTOfflineInterface.cxx:164
 AliHLTOfflineInterface.cxx:165
 AliHLTOfflineInterface.cxx:166
 AliHLTOfflineInterface.cxx:167
 AliHLTOfflineInterface.cxx:168
 AliHLTOfflineInterface.cxx:169
 AliHLTOfflineInterface.cxx:170
 AliHLTOfflineInterface.cxx:171
 AliHLTOfflineInterface.cxx:172
 AliHLTOfflineInterface.cxx:173
 AliHLTOfflineInterface.cxx:174
 AliHLTOfflineInterface.cxx:175
 AliHLTOfflineInterface.cxx:176
 AliHLTOfflineInterface.cxx:177
 AliHLTOfflineInterface.cxx:178
 AliHLTOfflineInterface.cxx:179
 AliHLTOfflineInterface.cxx:180
 AliHLTOfflineInterface.cxx:181
 AliHLTOfflineInterface.cxx:182
 AliHLTOfflineInterface.cxx:183
 AliHLTOfflineInterface.cxx:184
 AliHLTOfflineInterface.cxx:185
 AliHLTOfflineInterface.cxx:186
 AliHLTOfflineInterface.cxx:187
 AliHLTOfflineInterface.cxx:188
 AliHLTOfflineInterface.cxx:189
 AliHLTOfflineInterface.cxx:190
 AliHLTOfflineInterface.cxx:191
 AliHLTOfflineInterface.cxx:192
 AliHLTOfflineInterface.cxx:193
 AliHLTOfflineInterface.cxx:194
 AliHLTOfflineInterface.cxx:195
 AliHLTOfflineInterface.cxx:196
 AliHLTOfflineInterface.cxx:197
 AliHLTOfflineInterface.cxx:198
 AliHLTOfflineInterface.cxx:199
 AliHLTOfflineInterface.cxx:200
 AliHLTOfflineInterface.cxx:201
 AliHLTOfflineInterface.cxx:202
 AliHLTOfflineInterface.cxx:203
 AliHLTOfflineInterface.cxx:204
 AliHLTOfflineInterface.cxx:205
 AliHLTOfflineInterface.cxx:206
 AliHLTOfflineInterface.cxx:207
 AliHLTOfflineInterface.cxx:208
 AliHLTOfflineInterface.cxx:209
 AliHLTOfflineInterface.cxx:210
 AliHLTOfflineInterface.cxx:211
 AliHLTOfflineInterface.cxx:212
 AliHLTOfflineInterface.cxx:213
 AliHLTOfflineInterface.cxx:214
 AliHLTOfflineInterface.cxx:215
 AliHLTOfflineInterface.cxx:216
 AliHLTOfflineInterface.cxx:217
 AliHLTOfflineInterface.cxx:218