ROOT logo
// $Id$

//**************************************************************************
//* This file is property of and copyright by the ALICE HLT Project        * 
//* 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   AliHLTModulePreprocessor.cxx
// @author Matthias Richter
// @date   2008-01-22
// @brief  Base class for HLT module preprocessors
// 

#include <cstdlib>
#include <cassert>
#include "AliHLTModulePreprocessor.h"
#include "AliHLTShuttleInterface.h"
#include "TObjString.h"
#include "TString.h"
#include "TMap.h"
#include "TObject.h"
#include "TObjArray.h"


ClassImp(AliHLTModulePreprocessor)

AliHLTModulePreprocessor::AliHLTModulePreprocessor() 
  :
  fpInterface(NULL),
  fActiveDetectors(0)
{
  // see header file for class documentation
  // or
  // refer to README to build package
  // or
  // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
}

AliHLTModulePreprocessor::~AliHLTModulePreprocessor() 
{
  // see header file for function documentation
}

// TODO: map this constants to AliHLTDAQ class
const Int_t AliHLTModulePreprocessor::kNDetectors = 22;

const char* AliHLTModulePreprocessor::fgkDetectorName[kNDetectors] = 
{
  "ITSSPD",
  "ITSSDD",
  "ITSSSD",
  "TPC",
  "TRD",
  "TOF",
  "HMPID",
  "PHOS",
  "CPV",
  "PMD",
  "MUONTRK",
  "MUONTRG",
  "FMD",
  "T0",
  "VZERO", // Name to be changed to V0 ?
  "ZDC",
  "ACORDE",
  "TRG",
  "EMCAL",
  "DAQ_TEST",
  "HLT",
  "MFT"
};

void AliHLTModulePreprocessor::SetShuttleInterface(AliHLTShuttleInterface* pInterface)
{
  assert(fpInterface==NULL || fpInterface==pInterface || pInterface==NULL);
  fpInterface=pInterface;
}

Int_t AliHLTModulePreprocessor::GetRun() const
{
  // see header file for function documentation

  assert(fpInterface);
  if (!fpInterface) return 0;
  return fpInterface->PreprocessorGetRun();
}

UInt_t AliHLTModulePreprocessor::GetStartTime() const
{
  // see header file for function documentation

  assert(fpInterface);
  if (!fpInterface) return 0;
  return fpInterface->PreprocessorGetStartTime();
}

UInt_t AliHLTModulePreprocessor::GetEndTime() const
{
  // see header file for function documentation

  assert(fpInterface);
  if (!fpInterface) return 0;
  return fpInterface->PreprocessorGetEndTime();
}

Bool_t AliHLTModulePreprocessor::Store(const char* pathLevel2, const char* pathLevel3, TObject* object,
				 AliCDBMetaData* metaData, Int_t validityStart, Bool_t validityInfinite)
{
  // see header file for function documentation

  assert(fpInterface);
  if (!fpInterface) return 0;
  return fpInterface->PreprocessorStore(pathLevel2, pathLevel3, object, metaData, validityStart, validityInfinite);
}

Bool_t AliHLTModulePreprocessor::StoreReferenceData(const char* pathLevel2, const char* pathLevel3, TObject* object,
					      AliCDBMetaData* metaData)
{
  // see header file for function documentation

  assert(fpInterface);
  if (!fpInterface) return 0;
  return fpInterface->PreprocessorStoreReferenceData(pathLevel2, pathLevel3, object, metaData);
}

Bool_t AliHLTModulePreprocessor::StoreReferenceFile(const char* localFile, const char* gridFileName)
{
  // see header file for function documentation

  assert(fpInterface);
  if (!fpInterface) return 0;
  return fpInterface->PreprocessorStoreReferenceFile(localFile, gridFileName);
}

Bool_t AliHLTModulePreprocessor::StoreRunMetadataFile(const char* localFile, const char* gridFileName)
{
  // see header file for function documentation

  assert(fpInterface);
  if (!fpInterface) return 0;
  return fpInterface->PreprocessorStoreRunMetadataFile(localFile, gridFileName);
}
    
const char* AliHLTModulePreprocessor::GetFile(Int_t system, const char* id, const char* source)
{
  // see header file for function documentation

  assert(fpInterface);
  if (!fpInterface) return 0;
  return fpInterface->PreprocessorGetFile(system, id, source);
}

TList* AliHLTModulePreprocessor::GetFileSources(Int_t system, const char* id)
{
  // see header file for function documentation

  assert(fpInterface);
  if (!fpInterface) return 0;
  return fpInterface->PreprocessorGetFileSources(system, id);
}

TList* AliHLTModulePreprocessor::GetFileIDs(Int_t system, const char* source)
{
  // see header file for function documentation

  assert(fpInterface);
  if (!fpInterface) return 0;
  return fpInterface->PreprocessorGetFileIDs(system, source);
}

const char* AliHLTModulePreprocessor::GetRunParameter(const char* param)
{
  // see header file for function documentation

  assert(fpInterface);
  if (!fpInterface) return 0;
  return fpInterface->PreprocessorGetRunParameter(param);
}

AliCDBEntry* AliHLTModulePreprocessor::GetFromOCDB(const char* pathLevel2, const char* pathLevel3)
{
  // see header file for function documentation

  assert(fpInterface);
  if (!fpInterface) return 0;
  return fpInterface->PreprocessorGetFromOCDB(pathLevel2, pathLevel3);
}

const char* AliHLTModulePreprocessor::GetRunType()
{
  // see header file for function documentation

  assert(fpInterface);
  if (!fpInterface) return 0;
  return fpInterface->PreprocessorGetRunType();
}

void AliHLTModulePreprocessor::Log(const char* message)
{
  // see header file for function documentation

  assert(fpInterface);
  if (!fpInterface) return;
  fpInterface->PreprocessorLog(message);
}

Int_t AliHLTModulePreprocessor::DetectorBitMask(const char *detectorName)
{
  // Return the detector index
  // corresponding to a given
  // detector name
  TString detStr = detectorName;

  Int_t iDet;
  for(iDet = 0; iDet < kNDetectors; iDet++) {
    if (detStr.CompareTo(fgkDetectorName[iDet],TString::kIgnoreCase) == 0)
      break;
  }
  if (iDet == kNDetectors) 
    {
      TString errormessage;
      errormessage.Form("Invalid detector name: %s !",detectorName);
      Log(errormessage.Data());
      return -1;
    }

  Int_t detectorbitmask = 0;
  if(iDet > 32)
    {
      TString errormessage2;
      errormessage2.Form("Invalid detector bit position in detectorMask: %d !", iDet);
      Log(errormessage2.Data());
      return -1;
    }
  
  detectorbitmask = (1 << iDet);
  return detectorbitmask;
}

Bool_t AliHLTModulePreprocessor::GetDetectorStatus(Int_t detectorbitmask)
{
  // see header file for function documentation
  // retrieve list of active detectors from previous run.
  fActiveDetectors = atoi(AliHLTModulePreprocessor::GetRunParameter("detectorMask"));
 
  if((fActiveDetectors & detectorbitmask) != 0)
    {
      return 1;
    }
  else
    {
      return 0;
    }
}

// function copied from AliDAQ.cxx
const char *AliHLTModulePreprocessor::DetectorName(Int_t detectorID)
{
  // Returns the name of particular
  // detector identified by its index
  if (detectorID < 0 || detectorID >= kNDetectors) 
    {
      TString errormessage;
      errormessage.Form("Invalid detector index: %d (%d -> %d) !",detectorID,0,kNDetectors-1);
      Log(errormessage.Data());
      return "";
    }
  return fgkDetectorName[detectorID];
}

TObject* AliHLTModulePreprocessor::GetFromMap(TMap* dcsAliasMap, const char* stringId) const
{
  /// extract object from the alias map
  /// return the last object from the value set
  TObject* object=dcsAliasMap->FindObject(stringId);
  if (!object) return NULL;
  TPair* pair = dynamic_cast<TPair*>(object);
  if (pair && pair->Value()) {
    TObjArray* valueSet = dynamic_cast<TObjArray*>(pair->Value());
    if (!valueSet) return NULL;
    Int_t nentriesDCS = valueSet->GetEntriesFast() - 1;
    if(nentriesDCS>=0 && valueSet->At(nentriesDCS)){
      return valueSet->At(nentriesDCS);
    }
  }
  return NULL;
}
 AliHLTModulePreprocessor.cxx:1
 AliHLTModulePreprocessor.cxx:2
 AliHLTModulePreprocessor.cxx:3
 AliHLTModulePreprocessor.cxx:4
 AliHLTModulePreprocessor.cxx:5
 AliHLTModulePreprocessor.cxx:6
 AliHLTModulePreprocessor.cxx:7
 AliHLTModulePreprocessor.cxx:8
 AliHLTModulePreprocessor.cxx:9
 AliHLTModulePreprocessor.cxx:10
 AliHLTModulePreprocessor.cxx:11
 AliHLTModulePreprocessor.cxx:12
 AliHLTModulePreprocessor.cxx:13
 AliHLTModulePreprocessor.cxx:14
 AliHLTModulePreprocessor.cxx:15
 AliHLTModulePreprocessor.cxx:16
 AliHLTModulePreprocessor.cxx:17
 AliHLTModulePreprocessor.cxx:18
 AliHLTModulePreprocessor.cxx:19
 AliHLTModulePreprocessor.cxx:20
 AliHLTModulePreprocessor.cxx:21
 AliHLTModulePreprocessor.cxx:22
 AliHLTModulePreprocessor.cxx:23
 AliHLTModulePreprocessor.cxx:24
 AliHLTModulePreprocessor.cxx:25
 AliHLTModulePreprocessor.cxx:26
 AliHLTModulePreprocessor.cxx:27
 AliHLTModulePreprocessor.cxx:28
 AliHLTModulePreprocessor.cxx:29
 AliHLTModulePreprocessor.cxx:30
 AliHLTModulePreprocessor.cxx:31
 AliHLTModulePreprocessor.cxx:32
 AliHLTModulePreprocessor.cxx:33
 AliHLTModulePreprocessor.cxx:34
 AliHLTModulePreprocessor.cxx:35
 AliHLTModulePreprocessor.cxx:36
 AliHLTModulePreprocessor.cxx:37
 AliHLTModulePreprocessor.cxx:38
 AliHLTModulePreprocessor.cxx:39
 AliHLTModulePreprocessor.cxx:40
 AliHLTModulePreprocessor.cxx:41
 AliHLTModulePreprocessor.cxx:42
 AliHLTModulePreprocessor.cxx:43
 AliHLTModulePreprocessor.cxx:44
 AliHLTModulePreprocessor.cxx:45
 AliHLTModulePreprocessor.cxx:46
 AliHLTModulePreprocessor.cxx:47
 AliHLTModulePreprocessor.cxx:48
 AliHLTModulePreprocessor.cxx:49
 AliHLTModulePreprocessor.cxx:50
 AliHLTModulePreprocessor.cxx:51
 AliHLTModulePreprocessor.cxx:52
 AliHLTModulePreprocessor.cxx:53
 AliHLTModulePreprocessor.cxx:54
 AliHLTModulePreprocessor.cxx:55
 AliHLTModulePreprocessor.cxx:56
 AliHLTModulePreprocessor.cxx:57
 AliHLTModulePreprocessor.cxx:58
 AliHLTModulePreprocessor.cxx:59
 AliHLTModulePreprocessor.cxx:60
 AliHLTModulePreprocessor.cxx:61
 AliHLTModulePreprocessor.cxx:62
 AliHLTModulePreprocessor.cxx:63
 AliHLTModulePreprocessor.cxx:64
 AliHLTModulePreprocessor.cxx:65
 AliHLTModulePreprocessor.cxx:66
 AliHLTModulePreprocessor.cxx:67
 AliHLTModulePreprocessor.cxx:68
 AliHLTModulePreprocessor.cxx:69
 AliHLTModulePreprocessor.cxx:70
 AliHLTModulePreprocessor.cxx:71
 AliHLTModulePreprocessor.cxx:72
 AliHLTModulePreprocessor.cxx:73
 AliHLTModulePreprocessor.cxx:74
 AliHLTModulePreprocessor.cxx:75
 AliHLTModulePreprocessor.cxx:76
 AliHLTModulePreprocessor.cxx:77
 AliHLTModulePreprocessor.cxx:78
 AliHLTModulePreprocessor.cxx:79
 AliHLTModulePreprocessor.cxx:80
 AliHLTModulePreprocessor.cxx:81
 AliHLTModulePreprocessor.cxx:82
 AliHLTModulePreprocessor.cxx:83
 AliHLTModulePreprocessor.cxx:84
 AliHLTModulePreprocessor.cxx:85
 AliHLTModulePreprocessor.cxx:86
 AliHLTModulePreprocessor.cxx:87
 AliHLTModulePreprocessor.cxx:88
 AliHLTModulePreprocessor.cxx:89
 AliHLTModulePreprocessor.cxx:90
 AliHLTModulePreprocessor.cxx:91
 AliHLTModulePreprocessor.cxx:92
 AliHLTModulePreprocessor.cxx:93
 AliHLTModulePreprocessor.cxx:94
 AliHLTModulePreprocessor.cxx:95
 AliHLTModulePreprocessor.cxx:96
 AliHLTModulePreprocessor.cxx:97
 AliHLTModulePreprocessor.cxx:98
 AliHLTModulePreprocessor.cxx:99
 AliHLTModulePreprocessor.cxx:100
 AliHLTModulePreprocessor.cxx:101
 AliHLTModulePreprocessor.cxx:102
 AliHLTModulePreprocessor.cxx:103
 AliHLTModulePreprocessor.cxx:104
 AliHLTModulePreprocessor.cxx:105
 AliHLTModulePreprocessor.cxx:106
 AliHLTModulePreprocessor.cxx:107
 AliHLTModulePreprocessor.cxx:108
 AliHLTModulePreprocessor.cxx:109
 AliHLTModulePreprocessor.cxx:110
 AliHLTModulePreprocessor.cxx:111
 AliHLTModulePreprocessor.cxx:112
 AliHLTModulePreprocessor.cxx:113
 AliHLTModulePreprocessor.cxx:114
 AliHLTModulePreprocessor.cxx:115
 AliHLTModulePreprocessor.cxx:116
 AliHLTModulePreprocessor.cxx:117
 AliHLTModulePreprocessor.cxx:118
 AliHLTModulePreprocessor.cxx:119
 AliHLTModulePreprocessor.cxx:120
 AliHLTModulePreprocessor.cxx:121
 AliHLTModulePreprocessor.cxx:122
 AliHLTModulePreprocessor.cxx:123
 AliHLTModulePreprocessor.cxx:124
 AliHLTModulePreprocessor.cxx:125
 AliHLTModulePreprocessor.cxx:126
 AliHLTModulePreprocessor.cxx:127
 AliHLTModulePreprocessor.cxx:128
 AliHLTModulePreprocessor.cxx:129
 AliHLTModulePreprocessor.cxx:130
 AliHLTModulePreprocessor.cxx:131
 AliHLTModulePreprocessor.cxx:132
 AliHLTModulePreprocessor.cxx:133
 AliHLTModulePreprocessor.cxx:134
 AliHLTModulePreprocessor.cxx:135
 AliHLTModulePreprocessor.cxx:136
 AliHLTModulePreprocessor.cxx:137
 AliHLTModulePreprocessor.cxx:138
 AliHLTModulePreprocessor.cxx:139
 AliHLTModulePreprocessor.cxx:140
 AliHLTModulePreprocessor.cxx:141
 AliHLTModulePreprocessor.cxx:142
 AliHLTModulePreprocessor.cxx:143
 AliHLTModulePreprocessor.cxx:144
 AliHLTModulePreprocessor.cxx:145
 AliHLTModulePreprocessor.cxx:146
 AliHLTModulePreprocessor.cxx:147
 AliHLTModulePreprocessor.cxx:148
 AliHLTModulePreprocessor.cxx:149
 AliHLTModulePreprocessor.cxx:150
 AliHLTModulePreprocessor.cxx:151
 AliHLTModulePreprocessor.cxx:152
 AliHLTModulePreprocessor.cxx:153
 AliHLTModulePreprocessor.cxx:154
 AliHLTModulePreprocessor.cxx:155
 AliHLTModulePreprocessor.cxx:156
 AliHLTModulePreprocessor.cxx:157
 AliHLTModulePreprocessor.cxx:158
 AliHLTModulePreprocessor.cxx:159
 AliHLTModulePreprocessor.cxx:160
 AliHLTModulePreprocessor.cxx:161
 AliHLTModulePreprocessor.cxx:162
 AliHLTModulePreprocessor.cxx:163
 AliHLTModulePreprocessor.cxx:164
 AliHLTModulePreprocessor.cxx:165
 AliHLTModulePreprocessor.cxx:166
 AliHLTModulePreprocessor.cxx:167
 AliHLTModulePreprocessor.cxx:168
 AliHLTModulePreprocessor.cxx:169
 AliHLTModulePreprocessor.cxx:170
 AliHLTModulePreprocessor.cxx:171
 AliHLTModulePreprocessor.cxx:172
 AliHLTModulePreprocessor.cxx:173
 AliHLTModulePreprocessor.cxx:174
 AliHLTModulePreprocessor.cxx:175
 AliHLTModulePreprocessor.cxx:176
 AliHLTModulePreprocessor.cxx:177
 AliHLTModulePreprocessor.cxx:178
 AliHLTModulePreprocessor.cxx:179
 AliHLTModulePreprocessor.cxx:180
 AliHLTModulePreprocessor.cxx:181
 AliHLTModulePreprocessor.cxx:182
 AliHLTModulePreprocessor.cxx:183
 AliHLTModulePreprocessor.cxx:184
 AliHLTModulePreprocessor.cxx:185
 AliHLTModulePreprocessor.cxx:186
 AliHLTModulePreprocessor.cxx:187
 AliHLTModulePreprocessor.cxx:188
 AliHLTModulePreprocessor.cxx:189
 AliHLTModulePreprocessor.cxx:190
 AliHLTModulePreprocessor.cxx:191
 AliHLTModulePreprocessor.cxx:192
 AliHLTModulePreprocessor.cxx:193
 AliHLTModulePreprocessor.cxx:194
 AliHLTModulePreprocessor.cxx:195
 AliHLTModulePreprocessor.cxx:196
 AliHLTModulePreprocessor.cxx:197
 AliHLTModulePreprocessor.cxx:198
 AliHLTModulePreprocessor.cxx:199
 AliHLTModulePreprocessor.cxx:200
 AliHLTModulePreprocessor.cxx:201
 AliHLTModulePreprocessor.cxx:202
 AliHLTModulePreprocessor.cxx:203
 AliHLTModulePreprocessor.cxx:204
 AliHLTModulePreprocessor.cxx:205
 AliHLTModulePreprocessor.cxx:206
 AliHLTModulePreprocessor.cxx:207
 AliHLTModulePreprocessor.cxx:208
 AliHLTModulePreprocessor.cxx:209
 AliHLTModulePreprocessor.cxx:210
 AliHLTModulePreprocessor.cxx:211
 AliHLTModulePreprocessor.cxx:212
 AliHLTModulePreprocessor.cxx:213
 AliHLTModulePreprocessor.cxx:214
 AliHLTModulePreprocessor.cxx:215
 AliHLTModulePreprocessor.cxx:216
 AliHLTModulePreprocessor.cxx:217
 AliHLTModulePreprocessor.cxx:218
 AliHLTModulePreprocessor.cxx:219
 AliHLTModulePreprocessor.cxx:220
 AliHLTModulePreprocessor.cxx:221
 AliHLTModulePreprocessor.cxx:222
 AliHLTModulePreprocessor.cxx:223
 AliHLTModulePreprocessor.cxx:224
 AliHLTModulePreprocessor.cxx:225
 AliHLTModulePreprocessor.cxx:226
 AliHLTModulePreprocessor.cxx:227
 AliHLTModulePreprocessor.cxx:228
 AliHLTModulePreprocessor.cxx:229
 AliHLTModulePreprocessor.cxx:230
 AliHLTModulePreprocessor.cxx:231
 AliHLTModulePreprocessor.cxx:232
 AliHLTModulePreprocessor.cxx:233
 AliHLTModulePreprocessor.cxx:234
 AliHLTModulePreprocessor.cxx:235
 AliHLTModulePreprocessor.cxx:236
 AliHLTModulePreprocessor.cxx:237
 AliHLTModulePreprocessor.cxx:238
 AliHLTModulePreprocessor.cxx:239
 AliHLTModulePreprocessor.cxx:240
 AliHLTModulePreprocessor.cxx:241
 AliHLTModulePreprocessor.cxx:242
 AliHLTModulePreprocessor.cxx:243
 AliHLTModulePreprocessor.cxx:244
 AliHLTModulePreprocessor.cxx:245
 AliHLTModulePreprocessor.cxx:246
 AliHLTModulePreprocessor.cxx:247
 AliHLTModulePreprocessor.cxx:248
 AliHLTModulePreprocessor.cxx:249
 AliHLTModulePreprocessor.cxx:250
 AliHLTModulePreprocessor.cxx:251
 AliHLTModulePreprocessor.cxx:252
 AliHLTModulePreprocessor.cxx:253
 AliHLTModulePreprocessor.cxx:254
 AliHLTModulePreprocessor.cxx:255
 AliHLTModulePreprocessor.cxx:256
 AliHLTModulePreprocessor.cxx:257
 AliHLTModulePreprocessor.cxx:258
 AliHLTModulePreprocessor.cxx:259
 AliHLTModulePreprocessor.cxx:260
 AliHLTModulePreprocessor.cxx:261
 AliHLTModulePreprocessor.cxx:262
 AliHLTModulePreprocessor.cxx:263
 AliHLTModulePreprocessor.cxx:264
 AliHLTModulePreprocessor.cxx:265
 AliHLTModulePreprocessor.cxx:266
 AliHLTModulePreprocessor.cxx:267
 AliHLTModulePreprocessor.cxx:268
 AliHLTModulePreprocessor.cxx:269
 AliHLTModulePreprocessor.cxx:270
 AliHLTModulePreprocessor.cxx:271
 AliHLTModulePreprocessor.cxx:272
 AliHLTModulePreprocessor.cxx:273
 AliHLTModulePreprocessor.cxx:274
 AliHLTModulePreprocessor.cxx:275
 AliHLTModulePreprocessor.cxx:276
 AliHLTModulePreprocessor.cxx:277
 AliHLTModulePreprocessor.cxx:278
 AliHLTModulePreprocessor.cxx:279
 AliHLTModulePreprocessor.cxx:280
 AliHLTModulePreprocessor.cxx:281
 AliHLTModulePreprocessor.cxx:282
 AliHLTModulePreprocessor.cxx:283
 AliHLTModulePreprocessor.cxx:284
 AliHLTModulePreprocessor.cxx:285
 AliHLTModulePreprocessor.cxx:286
 AliHLTModulePreprocessor.cxx:287
 AliHLTModulePreprocessor.cxx:288
 AliHLTModulePreprocessor.cxx:289
 AliHLTModulePreprocessor.cxx:290
 AliHLTModulePreprocessor.cxx:291
 AliHLTModulePreprocessor.cxx:292
 AliHLTModulePreprocessor.cxx:293
 AliHLTModulePreprocessor.cxx:294
 AliHLTModulePreprocessor.cxx:295
 AliHLTModulePreprocessor.cxx:296
 AliHLTModulePreprocessor.cxx:297
 AliHLTModulePreprocessor.cxx:298