ROOT logo
// $Id: AliHLTPreprocessor.cxx 23039 2007-12-13 20:53:02Z richterm $

//**************************************************************************
//* 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   AliHLTPreprocessor.cxx
// @author Matthias Richter
// @brief  Container for HLT module preprocessors, acts to the outside as
//         HLT preprocessor used by the Offline Shuttle 
// 

#include "AliHLTPreprocessor.h"
#include "AliHLTModulePreprocessor.h"
#include "AliHLTSystem.h"
#include "AliHLTModuleAgent.h"
#include "TSystem.h"

ClassImp(AliHLTPreprocessor)

AliHLTPreprocessor::AliHLTPreprocessor(AliShuttleInterface* shuttle) 
  :
  AliPreprocessor(fgkHLTPreproc, shuttle),
  fProcessors(),
  fActiveDetectors(0)
{
  // Implementation of the HLT version for the Shuttle Preprocessor.
  // Since HLT requires a more modular concept of the pre-processors, this
  // class acts as HLT pre-processor to the outside and container class for
  // the specific HLT module pre-processors to the inside.

  // run types according to 
  // http://alice-ecs.web.cern.ch/alice-ecs/runtypes_3.16.html

  // PHOS (retrieve Huffman tables)
  AddRunType("STANDALONE");

  // TPC (retrieve Huffman tables and temperature data)
  AddRunType("PHYSICS");
  AddRunType("COSMIC");
  AddRunType("LASER");
  AddRunType("PEDESTAL");
  AddRunType("PULSER");

  // TRD
  AddRunType("PEDESTAL");
  AddRunType("STANDALONE");
 
  fProcessors.SetOwner();

}

const char* AliHLTPreprocessor::fgkHLTPreproc = "HLT";

/** HLT default component libraries */
const char* AliHLTPreprocessor::fgkHLTDefaultShuttleLibs[]= {
  "libAliHLTUtil.so", 
  "libAliHLTRCU.so", 
  "libAliHLTTPC.so", 
  "libAliHLTComp.so", 
  //"libAliHLTPHOS.so",
  //"libAliHLTMUON.so",
  "libAliHLTTRD.so",
  "libAliHLTGlobal.so",
  "libAliHLTTrigger.so",
  NULL
};

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

void AliHLTPreprocessor::Initialize(Int_t run, UInt_t startTime, 
			UInt_t endTime) 
{
  // init the preprocessor
  fRun = run;
  fStartTime = startTime;
  fEndTime = endTime;

  // TODO: read a configuration object from OCDB
  // configure
  // - component libraries

  // retrieve list of active detectors from previous run.
  fActiveDetectors = atoi(AliPreprocessor::GetRunParameter("detectorMask"));

  //   TString msg("Preprocessor for HLT initialized for run: ");
  //   msg += run;
  //   Log(msg.Data());
  
  // load component libraries
  TString libs;
  const char** deflib=fgkHLTDefaultShuttleLibs;
  while (*deflib) {
    if (gSystem->Load(*deflib)==0) {
      Log(Form("HLT component library %s loaded", *deflib));
    }
    
    deflib++;
  }

  for (AliHLTModuleAgent* pAgent=AliHLTModuleAgent::GetFirstAgent();
       pAgent!=NULL;
       pAgent=AliHLTModuleAgent::GetNextAgent()) {
    AliHLTModulePreprocessor* pProc=pAgent->GetPreprocessor();
    if (pProc) 
      {

	// filter preprocessors according to active detector pattern
	// don't filter if module returns 0 (i.e. always active)
	int moduleNo=pProc->GetModuleNumber();
	if(moduleNo>0 && (moduleNo & fActiveDetectors) == 0)
	  {
	    TString msg;
	    msg.Form("preprocessor module %s inactive", pProc->GetModuleID());
	    Log(msg.Data());
	    continue;
	  }
	
	pProc->SetShuttleInterface(this);
	pProc->Initialize(run, startTime, endTime);
	fProcessors.Add(pProc);
	TString msg;
	msg.Form("added preprocessor %p with ID %s for module %p", pProc, pProc->GetModuleID(), pAgent);
	Log(msg.Data());
      }
  }
}

UInt_t AliHLTPreprocessor::Process(TMap* dcsAliasMap)
{
  // process map of objects
  UInt_t retVal = 0;

  if (!GetHLTStatus()) {
    return 0;
  }

  bool bAllFailed=fProcessors.GetEntries()>0;
  TObjLink *lnk = NULL;
  lnk=fProcessors.FirstLink();
  while (lnk) {
    AliHLTModulePreprocessor* pProc=dynamic_cast<AliHLTModulePreprocessor*>(lnk->GetObject());
    if (pProc) {
      UInt_t result=pProc->Process(dcsAliasMap);
      if (result) {
	TString msg;
	msg.Form("preprocessor for module %s failed with error code %d", pProc->GetName(), result);
	Log(msg.Data());
      } else {
	bAllFailed=false;
      }
    }
    lnk = lnk->Next();
  }

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