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   AliHLTDimServer.cxx
//  @author Matthias Richter
//  @date   2010-03-10
//  @brief  HLT DIM server implementation and dynamic access
//          to DIM library

#include "AliHLTDimServer.h"
#include "TObjArray.h"
#include "TSystem.h"
#include "TThread.h"

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

AliHLTDimServer::AliHLTDimServer()
  : TNamed()
  , fServices()
  , fState(kStateOff)
  , fpServerThread(NULL)
  , fUpdatePeriod(10000)
{
  // see header file for class documentation
  // or
  // refer to README to build package
  // or
  // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
}

AliHLTDimServer::AliHLTDimServer(const char* servername)
  : TNamed(servername, "AliHLTDimServer")
  , fServices()
  , fState(kStateOff)
  , fpServerThread(NULL)
  , fUpdatePeriod(10000)
{
  // see header file for class documentation
}

AliHLTDimServer::AliHLTDimInterface* AliHLTDimServer::fgpInterface=NULL;

AliHLTDimServer::~AliHLTDimServer()
{
  // see header file for class documentation
}

int AliHLTDimServer::RegisterService(AliHLTDimService* pService)
{
  // see header file for class documentation
  if (!pService) return -EINVAL;
  if (fServices.FindObject(pService)) {
    AliHLTLogging log;
    log.LoggingVarargs(kHLTLogError, "AliHLTDimServer", "RegisterService" , __FILE__ , __LINE__ , "duplicate service name %s, skip ...", pService->GetName());
    return -EEXIST;
  }
  fServices.Add(pService);
  return 0;
}

AliHLTDimServer::AliHLTDimService* AliHLTDimServer::CreateService(enum AliHLTDimServer::AliHLTDimServiceDataType type, const char* name)
{
  // see header file for class documentation
  AliHLTDimService* service=new AliHLTDimService(type, name);
  int iResult=RegisterService(service);
  if (iResult<0) {
    AliHLTLogging log;
    log.LoggingVarargs(kHLTLogError, "AliHLTDimServer", "CreateService" , __FILE__ , __LINE__ , "failed to register service %s: %d", name, iResult);
    if (service) delete service;
    return NULL;
  }
  return service;
}

TObjArray* AliHLTDimServer::CreateServiceGroup(enum AliHLTDimServer::AliHLTDimServiceDataType type, const char* basename, int count)
{
  // see header file for class documentation
  int iResult=0;
  TObjArray* pServices=new TObjArray;
  AliHLTLogging log;
  if (pServices) {
    if (basename && count>0) {
      int digits=1;
      int i=count;
      while ((i/=10)>0) digits++;
      if (digits<9) {
	log.LoggingVarargs(kHLTLogDebug, "AliHLTDimServer", "CreateServiceGroup" , __FILE__ , __LINE__ , "basename=%s count=%d digits=%d\n", basename, count, digits);
	// length of name is at max strlen(basename) + 1 '_' + digits + 1 terminating zero
	// length of format is independent of number of digits
	// at max we need strlen(basename) + 5 chars + 1 terminating zero
	int namelen=strlen(basename)+5+digits;
	char* name=(char*)malloc(namelen);
	char* format=(char*)malloc(namelen);
	if (name && format) {
	  memset(name, 0, namelen);
	  memset(format, 0, namelen);
	  const char* key=strchr(basename, '%');
	  strncpy(format, basename, namelen-1);
	  if (key && key[1]!=0) {
	    int iPos=(key-basename)+1;
	    if (key[1]=='d') {
	      snprintf(format+iPos, namelen-iPos, "0*d"); // additional 3 chars
	      iPos+=3;
	    } else {
	      *(format+iPos++)='%';
	      *(format+iPos++)=key[1];
	    }
	    strncpy(format+iPos, &key[2], namelen-1-iPos);
	  } else {
	    snprintf(format+strlen(basename), namelen-strlen(basename), "_%%0*d"); // additional 5 chars
	  }
	  for (i=0; i<count && iResult>=0; i++) {
	    snprintf(name, namelen, format, digits, i);
	    AliHLTDimService* service=new AliHLTDimService(type, name);
	    iResult=RegisterService(service);
	  }
	} else {
	  iResult=-ENOMEM;
	}
	if (name) free(name);
	if (format) free(format);
      }
    }
  }
  return pServices;
}

int AliHLTDimServer::UpdateServices()
{
  /// Update all services via the Dim channel
  return 0;
}

AliHLTDimServer::AliHLTDimInterface* AliHLTDimServer::Interface()
{
  // get instance of the interface
  if (!fgpInterface) {
    fgpInterface=new AliHLTDimInterface;
    if (fgpInterface) {
      if (fgpInterface->Init() != 0) {
        delete fgpInterface;
        fgpInterface = NULL;
      }
    }
  }
  return fgpInterface;
}

int AliHLTDimServer::Init(const char* dimNameServer)
{
  // init the dim server, check if the interface is available and set the
  // DIM DNS node name
  AliHLTLogging log;
  const char* myname=GetName();
  if (myname==NULL || myname[0]==0) {
    log.LoggingVarargs(kHLTLogError, "AliHLTDimServer", "Init" , __FILE__ , __LINE__ , "can not start without a server name, skipping initialization ...");
    return -EINVAL;
  }

  if (Interface()==NULL) return -ENODEV;

  Interface()->DisSetDnsNode(dimNameServer);
  return 0;
}

int AliHLTDimServer::Reset()
{
  // reset the DIM server, functionality needs to be clarified
  return 0;
}

int AliHLTDimServer::Start()
{
  // start the server in a separate thread
  int iResult=0;
  AliHLTLogging log;
  if (GetState()!=kStateOff) {
    log.LoggingVarargs(kHLTLogError, "AliHLTDimServer", "Start" , __FILE__ , __LINE__ , "server is not off, currently in state %d", GetState());
    return -ENOENT;
  }
  fpServerThread=new TThread(ServerLoop, (void*)this);
  if (!fpServerThread) {
    log.LoggingVarargs(kHLTLogError, "AliHLTDimServer", "Start" , __FILE__ , __LINE__ , "unable to create server thread");
    return -ENOMEM;
  }
  SetState(kStateStarting);
  fpServerThread->Run();
  
  int count=0;
  const int maxcount=100;
  const int maxsleepms=1000;
  while (GetState()==kStateStarting) {
    if (count++==maxcount) break;
    gSystem->Sleep(maxsleepms/maxcount);
  }

  if (GetState()!=kStateRunning) {
    log.LoggingVarargs(kHLTLogError, "AliHLTDimServer", "Start" , __FILE__ , __LINE__ , "could not start server, currently in state %d", GetState());
    Reset();
    iResult=-EFAULT;
  }
  return iResult;
}

int AliHLTDimServer::Stop() 
{
  // stop the server thread
  int iResult=0;
  AliHLTLogging log;
  if (GetState()!=kStateRunning) {
    log.LoggingVarargs(kHLTLogError, "AliHLTDimServer", "Stop" , __FILE__ , __LINE__ , "server is not running, currently in state %d", GetState());
    return -ENOENT;
  }
  SetState(kStateStopping);
  int count=0;
  const int maxcount=100;
  const int maxsleepms=2*fUpdatePeriod;
  while (GetState()==kStateStopping) {
    if (count++==maxcount) break;
    gSystem->Sleep(maxsleepms/maxcount);
  }

  if (GetState()!=kStateOff) {
    log.LoggingVarargs(kHLTLogError, "AliHLTDimServer", "Stop" , __FILE__ , __LINE__ , "could not stop server, currently in state %d", GetState());
    Reset();
    iResult=-EFAULT;
  }
  return iResult;
}

void* AliHLTDimServer::ServerLoop(void* param)
{
  // see header file for class documentation
  if (!param) return (void*)0;
  AliHLTDimServer* server=reinterpret_cast<AliHLTDimServer*>(param);
  return server->ServerLoop();
}

void* AliHLTDimServer::ServerLoop()
{
  // see header file for class documentation
  if (!Interface()) return (void*)-ENODEV;

  AliHLTLogging log;
  TIter next(&fServices);
  TObject* obj=NULL;
  while ((obj=next())!=NULL) {
    AliHLTDimService* pService=dynamic_cast<AliHLTDimService*>(obj);
    if (!pService) continue;
    TString name=GetName(); name+="_"; name+=pService->GetName();
    const char* type="";
    void* buffer=pService->GetLocation();
    int size=0;
    switch (pService->GetType()) {
    case kDataTypeCustom:
    case kDataTypeInt:
    case kDataTypeFloat:
      type=pService->GetTypeString();
      size=pService->GetDataSize();
      break;
    case kDataTypeString:
      log.LoggingVarargs(kHLTLogError, "AliHLTDimServer::AliHLTDimService", "ServerLoop" , __FILE__ , __LINE__ , "ignoring dim service %s: type 'string' not yet implemented", name.Data());
      break;
    default:
      log.LoggingVarargs(kHLTLogError, "AliHLTDimServer::AliHLTDimService", "ServerLoop" , __FILE__ , __LINE__ , "ignoring dim service %s: unknown type %d", name.Data(), pService->GetType());
    }
    if (type[0]!=0) {
      int id=Interface()->DisAddService(name.Data(), type, buffer, size);
      if (id<0) {
	log.LoggingVarargs(kHLTLogError, "AliHLTDimServer::AliHLTDimService", "ServerLoop" , __FILE__ , __LINE__ , "failed to add dim service %s: error %d", name.Data(), id);
      } else {
	 pService->SetId(id);
      }
    }
  }

  SetState(kStateRunning);
  Interface()->DisStartServing(GetName());
  while (GetState()==kStateRunning) {
    gSystem->Sleep(fUpdatePeriod);
  }

  if (GetState()!=kStateStopping) return (void*)0;

  // cleanup
  Interface()->DisStopServing();
  next.Reset();
  while ((obj=next())!=NULL) {
    const AliHLTDimService* pService=dynamic_cast<const AliHLTDimService*>(obj);
    if (!pService || pService->GetId()<0) continue;
    // int iResult=Interface()->DisRemoveService(pService->GetId());
    // if (iResult<0) {
    //   log.LoggingVarargs(kHLTLogError, "AliHLTDimServer::AliHLTDimService", "ServerLoop" , __FILE__ , __LINE__ , "failed to remove dim service %s: error %d", pService->GetName(), iResult);
    // }
  }

  SetState(kStateOff);

  return (void*)0;
}

AliHLTDimServer::AliHLTDimService::AliHLTDimService()
  : TNamed()
  , fData()
  , fType(kDataTypeUnknown)
  , fTypeString()
  , fDataBuffer(NULL)
  , fDataSize(0)
  , fId(-1)
{
  // see header file for class documentation
}

AliHLTDimServer::AliHLTDimService::AliHLTDimService(enum AliHLTDimServiceDataType type, const char* servicename)
  : TNamed(servicename, "AliHLTDimService")
  , fData()
  , fType(type)
  , fTypeString()
  , fDataBuffer(NULL)
  , fDataSize(0)
  , fId(-1)
{
  // see header file for class documentation
  AliHLTLogging log;
  switch (fType) {
  case kDataTypeCustom:
    log.LoggingVarargs(kHLTLogError, "AliHLTDimServer", "AliHLTDimService" , __FILE__ , __LINE__ , "cannot use the kDataTypeCustom type with this method");
    break;
  case kDataTypeInt:
    fTypeString="I";
    fDataBuffer=&fData.iVal;
    fDataSize=sizeof(int);
    break;
  case kDataTypeFloat:
    fTypeString="F";
    fDataBuffer=&fData.fVal;
    fDataSize=sizeof(float);
    break;
  case kDataTypeString:
    log.LoggingVarargs(kHLTLogError, "AliHLTDimServer", "AliHLTDimService" , __FILE__ , __LINE__ , "dim service type 'string' not yet implemented");
    break;
  default:
    log.LoggingVarargs(kHLTLogError, "AliHLTDimServer", "AliHLTDimService" , __FILE__ , __LINE__ , "Unknown dim service type %d", fType);
  };
}

AliHLTDimServer::AliHLTDimService::AliHLTDimService(const char* type, void* data, int size, const char* servicename)
  : TNamed(servicename, "AliHLTDimService")
  , fData()
  , fType(kDataTypeCustom)
  , fTypeString(type)
  , fDataBuffer(data)
  , fDataSize(size)
  , fId(-1)
{
  // see header file for class documentation
}

void AliHLTDimServer::AliHLTDimService::Update()
{
  // see header file for class documentation
  static bool bWarning=true;
  AliHLTLogging log;
  switch (fType) {
  case kDataTypeCustom: break;
  default:
    if (bWarning) log.LoggingVarargs(kHLTLogError, "AliHLTDimServer::AliHLTDimService", "Update" , __FILE__ , __LINE__ , "The service %s must be a custom type (kDataTypeCustom) to use this form of Update", GetName());
    bWarning=false;
  };

  AliHLTDimServer::Interface()->DisUpdateService(fId);
}

void AliHLTDimServer::AliHLTDimService::Update(const AliHLTDimServicePoint_t& sp)
{
  // see header file for class documentation
  static bool bWarning=true;
  AliHLTLogging log;
  switch (fType) {
  case kDataTypeCustom:
    if (bWarning) log.LoggingVarargs(kHLTLogError, "AliHLTDimServer::AliHLTDimService", "Update" , __FILE__ , __LINE__ , "Should not call this form of Update for custom type (kDataTypeCustom) service %s", GetName());
    bWarning=false;
    return;
  case kDataTypeInt: fData.iVal=sp.iVal; break;
  case kDataTypeFloat: fData.fVal=sp.fVal; break;
  case kDataTypeString:
    if (bWarning) log.LoggingVarargs(kHLTLogError, "AliHLTDimServer::AliHLTDimService", "Update" , __FILE__ , __LINE__ , "Failed to update dim service %s: 'string' not yet implemented", GetName());
    bWarning=false;
    break;
  default:
    if (bWarning) log.LoggingVarargs(kHLTLogError, "AliHLTDimServer::AliHLTDimService", "Update" , __FILE__ , __LINE__ , "Failed to update dim service %s: unknown type %d", GetName(), fType);
    bWarning=false;
  };

  AliHLTDimServer::Interface()->DisUpdateService(fId);
}

AliHLTDimServer::AliHLTDimInterface::AliHLTDimInterface()
  : AliHLTLogging()
  , fpDisAddService(NULL)
  , fpDisRemoveService(NULL)
  , fpDisUpdateService(NULL)
  , fpDisStartServing(NULL)
  , fpDisStopServing(NULL)
  , fpDisSetDnsNode(NULL)
{
}

AliHLTDimServer::AliHLTDimInterface::~AliHLTDimInterface()
{
}


const char* AliHLTDimServer::AliHLTDimInterface::fgkDimLibraryName="libdim.so";
const char* AliHLTDimServer::AliHLTDimInterface::fgkDisAddServiceSymbol="dis_add_service";
const char* AliHLTDimServer::AliHLTDimInterface::fgkDisRemoveServiceSymbol="dis_remove_service";
const char* AliHLTDimServer::AliHLTDimInterface::fgkDisUpdateServiceSymbol="dis_update_service";
const char* AliHLTDimServer::AliHLTDimInterface::fgkDisStartServingSymbol="dis_start_serving";
const char* AliHLTDimServer::AliHLTDimInterface::fgkDisStopServingSymbol="dis_stop_serving";
const char* AliHLTDimServer::AliHLTDimInterface::fgkDisSetDnsNodeSymbol="dis_set_dns_node";

int AliHLTDimServer::AliHLTDimInterface::Init()
{
  /// load the dim library and function pointers
  if (gSystem->Load(fgkDimLibraryName)) {
    HLTFatal("failed to load dim library: %s", fgkDimLibraryName);
    return -ENODEV;
  }

  fpDisAddService=(fctDisAddService)FindSymbol(fgkDimLibraryName, fgkDisAddServiceSymbol);
  if (!fpDisAddService) return -ENODEV;

  fpDisRemoveService=(fctDisRemoveService)FindSymbol(fgkDimLibraryName, fgkDisRemoveServiceSymbol);
  if (!fpDisRemoveService) return -ENODEV;

  fpDisUpdateService=(fctDisUpdateService)FindSymbol(fgkDimLibraryName, fgkDisUpdateServiceSymbol);
  if (!fpDisUpdateService) return -ENODEV;

  fpDisStartServing=(fctDisCharArg)FindSymbol(fgkDimLibraryName, fgkDisStartServingSymbol);
  if (!fpDisStartServing) return -ENODEV;

  fpDisStopServing=(fctDisNoArg)FindSymbol(fgkDimLibraryName, fgkDisStopServingSymbol);
  if (!fpDisStopServing) return -ENODEV;

  fpDisSetDnsNode=(fctDisCharArg)FindSymbol(fgkDimLibraryName, fgkDisSetDnsNodeSymbol);
  if (!fpDisSetDnsNode) return -ENODEV;

  return 0;
}

AliHLTDimServer::fctVoid AliHLTDimServer::AliHLTDimInterface::FindSymbol(const char* library, const char* symbol) const
{
  /// Find symbol in the dim library
  TString tmp=symbol;
  fctVoid fctptr=gSystem->DynFindSymbol(library, tmp.Data());
  if (!fctptr) {
    // do a 2nd try with appended '_'
    tmp+="_";
    fctptr=gSystem->DynFindSymbol(library, tmp.Data());
  }
  if (fctptr) return fctptr;

  HLTError("can not find symbol '%s' in %s", symbol, library);
  return NULL;
}
 AliHLTDimServer.cxx:1
 AliHLTDimServer.cxx:2
 AliHLTDimServer.cxx:3
 AliHLTDimServer.cxx:4
 AliHLTDimServer.cxx:5
 AliHLTDimServer.cxx:6
 AliHLTDimServer.cxx:7
 AliHLTDimServer.cxx:8
 AliHLTDimServer.cxx:9
 AliHLTDimServer.cxx:10
 AliHLTDimServer.cxx:11
 AliHLTDimServer.cxx:12
 AliHLTDimServer.cxx:13
 AliHLTDimServer.cxx:14
 AliHLTDimServer.cxx:15
 AliHLTDimServer.cxx:16
 AliHLTDimServer.cxx:17
 AliHLTDimServer.cxx:18
 AliHLTDimServer.cxx:19
 AliHLTDimServer.cxx:20
 AliHLTDimServer.cxx:21
 AliHLTDimServer.cxx:22
 AliHLTDimServer.cxx:23
 AliHLTDimServer.cxx:24
 AliHLTDimServer.cxx:25
 AliHLTDimServer.cxx:26
 AliHLTDimServer.cxx:27
 AliHLTDimServer.cxx:28
 AliHLTDimServer.cxx:29
 AliHLTDimServer.cxx:30
 AliHLTDimServer.cxx:31
 AliHLTDimServer.cxx:32
 AliHLTDimServer.cxx:33
 AliHLTDimServer.cxx:34
 AliHLTDimServer.cxx:35
 AliHLTDimServer.cxx:36
 AliHLTDimServer.cxx:37
 AliHLTDimServer.cxx:38
 AliHLTDimServer.cxx:39
 AliHLTDimServer.cxx:40
 AliHLTDimServer.cxx:41
 AliHLTDimServer.cxx:42
 AliHLTDimServer.cxx:43
 AliHLTDimServer.cxx:44
 AliHLTDimServer.cxx:45
 AliHLTDimServer.cxx:46
 AliHLTDimServer.cxx:47
 AliHLTDimServer.cxx:48
 AliHLTDimServer.cxx:49
 AliHLTDimServer.cxx:50
 AliHLTDimServer.cxx:51
 AliHLTDimServer.cxx:52
 AliHLTDimServer.cxx:53
 AliHLTDimServer.cxx:54
 AliHLTDimServer.cxx:55
 AliHLTDimServer.cxx:56
 AliHLTDimServer.cxx:57
 AliHLTDimServer.cxx:58
 AliHLTDimServer.cxx:59
 AliHLTDimServer.cxx:60
 AliHLTDimServer.cxx:61
 AliHLTDimServer.cxx:62
 AliHLTDimServer.cxx:63
 AliHLTDimServer.cxx:64
 AliHLTDimServer.cxx:65
 AliHLTDimServer.cxx:66
 AliHLTDimServer.cxx:67
 AliHLTDimServer.cxx:68
 AliHLTDimServer.cxx:69
 AliHLTDimServer.cxx:70
 AliHLTDimServer.cxx:71
 AliHLTDimServer.cxx:72
 AliHLTDimServer.cxx:73
 AliHLTDimServer.cxx:74
 AliHLTDimServer.cxx:75
 AliHLTDimServer.cxx:76
 AliHLTDimServer.cxx:77
 AliHLTDimServer.cxx:78
 AliHLTDimServer.cxx:79
 AliHLTDimServer.cxx:80
 AliHLTDimServer.cxx:81
 AliHLTDimServer.cxx:82
 AliHLTDimServer.cxx:83
 AliHLTDimServer.cxx:84
 AliHLTDimServer.cxx:85
 AliHLTDimServer.cxx:86
 AliHLTDimServer.cxx:87
 AliHLTDimServer.cxx:88
 AliHLTDimServer.cxx:89
 AliHLTDimServer.cxx:90
 AliHLTDimServer.cxx:91
 AliHLTDimServer.cxx:92
 AliHLTDimServer.cxx:93
 AliHLTDimServer.cxx:94
 AliHLTDimServer.cxx:95
 AliHLTDimServer.cxx:96
 AliHLTDimServer.cxx:97
 AliHLTDimServer.cxx:98
 AliHLTDimServer.cxx:99
 AliHLTDimServer.cxx:100
 AliHLTDimServer.cxx:101
 AliHLTDimServer.cxx:102
 AliHLTDimServer.cxx:103
 AliHLTDimServer.cxx:104
 AliHLTDimServer.cxx:105
 AliHLTDimServer.cxx:106
 AliHLTDimServer.cxx:107
 AliHLTDimServer.cxx:108
 AliHLTDimServer.cxx:109
 AliHLTDimServer.cxx:110
 AliHLTDimServer.cxx:111
 AliHLTDimServer.cxx:112
 AliHLTDimServer.cxx:113
 AliHLTDimServer.cxx:114
 AliHLTDimServer.cxx:115
 AliHLTDimServer.cxx:116
 AliHLTDimServer.cxx:117
 AliHLTDimServer.cxx:118
 AliHLTDimServer.cxx:119
 AliHLTDimServer.cxx:120
 AliHLTDimServer.cxx:121
 AliHLTDimServer.cxx:122
 AliHLTDimServer.cxx:123
 AliHLTDimServer.cxx:124
 AliHLTDimServer.cxx:125
 AliHLTDimServer.cxx:126
 AliHLTDimServer.cxx:127
 AliHLTDimServer.cxx:128
 AliHLTDimServer.cxx:129
 AliHLTDimServer.cxx:130
 AliHLTDimServer.cxx:131
 AliHLTDimServer.cxx:132
 AliHLTDimServer.cxx:133
 AliHLTDimServer.cxx:134
 AliHLTDimServer.cxx:135
 AliHLTDimServer.cxx:136
 AliHLTDimServer.cxx:137
 AliHLTDimServer.cxx:138
 AliHLTDimServer.cxx:139
 AliHLTDimServer.cxx:140
 AliHLTDimServer.cxx:141
 AliHLTDimServer.cxx:142
 AliHLTDimServer.cxx:143
 AliHLTDimServer.cxx:144
 AliHLTDimServer.cxx:145
 AliHLTDimServer.cxx:146
 AliHLTDimServer.cxx:147
 AliHLTDimServer.cxx:148
 AliHLTDimServer.cxx:149
 AliHLTDimServer.cxx:150
 AliHLTDimServer.cxx:151
 AliHLTDimServer.cxx:152
 AliHLTDimServer.cxx:153
 AliHLTDimServer.cxx:154
 AliHLTDimServer.cxx:155
 AliHLTDimServer.cxx:156
 AliHLTDimServer.cxx:157
 AliHLTDimServer.cxx:158
 AliHLTDimServer.cxx:159
 AliHLTDimServer.cxx:160
 AliHLTDimServer.cxx:161
 AliHLTDimServer.cxx:162
 AliHLTDimServer.cxx:163
 AliHLTDimServer.cxx:164
 AliHLTDimServer.cxx:165
 AliHLTDimServer.cxx:166
 AliHLTDimServer.cxx:167
 AliHLTDimServer.cxx:168
 AliHLTDimServer.cxx:169
 AliHLTDimServer.cxx:170
 AliHLTDimServer.cxx:171
 AliHLTDimServer.cxx:172
 AliHLTDimServer.cxx:173
 AliHLTDimServer.cxx:174
 AliHLTDimServer.cxx:175
 AliHLTDimServer.cxx:176
 AliHLTDimServer.cxx:177
 AliHLTDimServer.cxx:178
 AliHLTDimServer.cxx:179
 AliHLTDimServer.cxx:180
 AliHLTDimServer.cxx:181
 AliHLTDimServer.cxx:182
 AliHLTDimServer.cxx:183
 AliHLTDimServer.cxx:184
 AliHLTDimServer.cxx:185
 AliHLTDimServer.cxx:186
 AliHLTDimServer.cxx:187
 AliHLTDimServer.cxx:188
 AliHLTDimServer.cxx:189
 AliHLTDimServer.cxx:190
 AliHLTDimServer.cxx:191
 AliHLTDimServer.cxx:192
 AliHLTDimServer.cxx:193
 AliHLTDimServer.cxx:194
 AliHLTDimServer.cxx:195
 AliHLTDimServer.cxx:196
 AliHLTDimServer.cxx:197
 AliHLTDimServer.cxx:198
 AliHLTDimServer.cxx:199
 AliHLTDimServer.cxx:200
 AliHLTDimServer.cxx:201
 AliHLTDimServer.cxx:202
 AliHLTDimServer.cxx:203
 AliHLTDimServer.cxx:204
 AliHLTDimServer.cxx:205
 AliHLTDimServer.cxx:206
 AliHLTDimServer.cxx:207
 AliHLTDimServer.cxx:208
 AliHLTDimServer.cxx:209
 AliHLTDimServer.cxx:210
 AliHLTDimServer.cxx:211
 AliHLTDimServer.cxx:212
 AliHLTDimServer.cxx:213
 AliHLTDimServer.cxx:214
 AliHLTDimServer.cxx:215
 AliHLTDimServer.cxx:216
 AliHLTDimServer.cxx:217
 AliHLTDimServer.cxx:218
 AliHLTDimServer.cxx:219
 AliHLTDimServer.cxx:220
 AliHLTDimServer.cxx:221
 AliHLTDimServer.cxx:222
 AliHLTDimServer.cxx:223
 AliHLTDimServer.cxx:224
 AliHLTDimServer.cxx:225
 AliHLTDimServer.cxx:226
 AliHLTDimServer.cxx:227
 AliHLTDimServer.cxx:228
 AliHLTDimServer.cxx:229
 AliHLTDimServer.cxx:230
 AliHLTDimServer.cxx:231
 AliHLTDimServer.cxx:232
 AliHLTDimServer.cxx:233
 AliHLTDimServer.cxx:234
 AliHLTDimServer.cxx:235
 AliHLTDimServer.cxx:236
 AliHLTDimServer.cxx:237
 AliHLTDimServer.cxx:238
 AliHLTDimServer.cxx:239
 AliHLTDimServer.cxx:240
 AliHLTDimServer.cxx:241
 AliHLTDimServer.cxx:242
 AliHLTDimServer.cxx:243
 AliHLTDimServer.cxx:244
 AliHLTDimServer.cxx:245
 AliHLTDimServer.cxx:246
 AliHLTDimServer.cxx:247
 AliHLTDimServer.cxx:248
 AliHLTDimServer.cxx:249
 AliHLTDimServer.cxx:250
 AliHLTDimServer.cxx:251
 AliHLTDimServer.cxx:252
 AliHLTDimServer.cxx:253
 AliHLTDimServer.cxx:254
 AliHLTDimServer.cxx:255
 AliHLTDimServer.cxx:256
 AliHLTDimServer.cxx:257
 AliHLTDimServer.cxx:258
 AliHLTDimServer.cxx:259
 AliHLTDimServer.cxx:260
 AliHLTDimServer.cxx:261
 AliHLTDimServer.cxx:262
 AliHLTDimServer.cxx:263
 AliHLTDimServer.cxx:264
 AliHLTDimServer.cxx:265
 AliHLTDimServer.cxx:266
 AliHLTDimServer.cxx:267
 AliHLTDimServer.cxx:268
 AliHLTDimServer.cxx:269
 AliHLTDimServer.cxx:270
 AliHLTDimServer.cxx:271
 AliHLTDimServer.cxx:272
 AliHLTDimServer.cxx:273
 AliHLTDimServer.cxx:274
 AliHLTDimServer.cxx:275
 AliHLTDimServer.cxx:276
 AliHLTDimServer.cxx:277
 AliHLTDimServer.cxx:278
 AliHLTDimServer.cxx:279
 AliHLTDimServer.cxx:280
 AliHLTDimServer.cxx:281
 AliHLTDimServer.cxx:282
 AliHLTDimServer.cxx:283
 AliHLTDimServer.cxx:284
 AliHLTDimServer.cxx:285
 AliHLTDimServer.cxx:286
 AliHLTDimServer.cxx:287
 AliHLTDimServer.cxx:288
 AliHLTDimServer.cxx:289
 AliHLTDimServer.cxx:290
 AliHLTDimServer.cxx:291
 AliHLTDimServer.cxx:292
 AliHLTDimServer.cxx:293
 AliHLTDimServer.cxx:294
 AliHLTDimServer.cxx:295
 AliHLTDimServer.cxx:296
 AliHLTDimServer.cxx:297
 AliHLTDimServer.cxx:298
 AliHLTDimServer.cxx:299
 AliHLTDimServer.cxx:300
 AliHLTDimServer.cxx:301
 AliHLTDimServer.cxx:302
 AliHLTDimServer.cxx:303
 AliHLTDimServer.cxx:304
 AliHLTDimServer.cxx:305
 AliHLTDimServer.cxx:306
 AliHLTDimServer.cxx:307
 AliHLTDimServer.cxx:308
 AliHLTDimServer.cxx:309
 AliHLTDimServer.cxx:310
 AliHLTDimServer.cxx:311
 AliHLTDimServer.cxx:312
 AliHLTDimServer.cxx:313
 AliHLTDimServer.cxx:314
 AliHLTDimServer.cxx:315
 AliHLTDimServer.cxx:316
 AliHLTDimServer.cxx:317
 AliHLTDimServer.cxx:318
 AliHLTDimServer.cxx:319
 AliHLTDimServer.cxx:320
 AliHLTDimServer.cxx:321
 AliHLTDimServer.cxx:322
 AliHLTDimServer.cxx:323
 AliHLTDimServer.cxx:324
 AliHLTDimServer.cxx:325
 AliHLTDimServer.cxx:326
 AliHLTDimServer.cxx:327
 AliHLTDimServer.cxx:328
 AliHLTDimServer.cxx:329
 AliHLTDimServer.cxx:330
 AliHLTDimServer.cxx:331
 AliHLTDimServer.cxx:332
 AliHLTDimServer.cxx:333
 AliHLTDimServer.cxx:334
 AliHLTDimServer.cxx:335
 AliHLTDimServer.cxx:336
 AliHLTDimServer.cxx:337
 AliHLTDimServer.cxx:338
 AliHLTDimServer.cxx:339
 AliHLTDimServer.cxx:340
 AliHLTDimServer.cxx:341
 AliHLTDimServer.cxx:342
 AliHLTDimServer.cxx:343
 AliHLTDimServer.cxx:344
 AliHLTDimServer.cxx:345
 AliHLTDimServer.cxx:346
 AliHLTDimServer.cxx:347
 AliHLTDimServer.cxx:348
 AliHLTDimServer.cxx:349
 AliHLTDimServer.cxx:350
 AliHLTDimServer.cxx:351
 AliHLTDimServer.cxx:352
 AliHLTDimServer.cxx:353
 AliHLTDimServer.cxx:354
 AliHLTDimServer.cxx:355
 AliHLTDimServer.cxx:356
 AliHLTDimServer.cxx:357
 AliHLTDimServer.cxx:358
 AliHLTDimServer.cxx:359
 AliHLTDimServer.cxx:360
 AliHLTDimServer.cxx:361
 AliHLTDimServer.cxx:362
 AliHLTDimServer.cxx:363
 AliHLTDimServer.cxx:364
 AliHLTDimServer.cxx:365
 AliHLTDimServer.cxx:366
 AliHLTDimServer.cxx:367
 AliHLTDimServer.cxx:368
 AliHLTDimServer.cxx:369
 AliHLTDimServer.cxx:370
 AliHLTDimServer.cxx:371
 AliHLTDimServer.cxx:372
 AliHLTDimServer.cxx:373
 AliHLTDimServer.cxx:374
 AliHLTDimServer.cxx:375
 AliHLTDimServer.cxx:376
 AliHLTDimServer.cxx:377
 AliHLTDimServer.cxx:378
 AliHLTDimServer.cxx:379
 AliHLTDimServer.cxx:380
 AliHLTDimServer.cxx:381
 AliHLTDimServer.cxx:382
 AliHLTDimServer.cxx:383
 AliHLTDimServer.cxx:384
 AliHLTDimServer.cxx:385
 AliHLTDimServer.cxx:386
 AliHLTDimServer.cxx:387
 AliHLTDimServer.cxx:388
 AliHLTDimServer.cxx:389
 AliHLTDimServer.cxx:390
 AliHLTDimServer.cxx:391
 AliHLTDimServer.cxx:392
 AliHLTDimServer.cxx:393
 AliHLTDimServer.cxx:394
 AliHLTDimServer.cxx:395
 AliHLTDimServer.cxx:396
 AliHLTDimServer.cxx:397
 AliHLTDimServer.cxx:398
 AliHLTDimServer.cxx:399
 AliHLTDimServer.cxx:400
 AliHLTDimServer.cxx:401
 AliHLTDimServer.cxx:402
 AliHLTDimServer.cxx:403
 AliHLTDimServer.cxx:404
 AliHLTDimServer.cxx:405
 AliHLTDimServer.cxx:406
 AliHLTDimServer.cxx:407
 AliHLTDimServer.cxx:408
 AliHLTDimServer.cxx:409
 AliHLTDimServer.cxx:410
 AliHLTDimServer.cxx:411
 AliHLTDimServer.cxx:412
 AliHLTDimServer.cxx:413
 AliHLTDimServer.cxx:414
 AliHLTDimServer.cxx:415
 AliHLTDimServer.cxx:416
 AliHLTDimServer.cxx:417
 AliHLTDimServer.cxx:418
 AliHLTDimServer.cxx:419
 AliHLTDimServer.cxx:420
 AliHLTDimServer.cxx:421
 AliHLTDimServer.cxx:422
 AliHLTDimServer.cxx:423
 AliHLTDimServer.cxx:424
 AliHLTDimServer.cxx:425
 AliHLTDimServer.cxx:426
 AliHLTDimServer.cxx:427
 AliHLTDimServer.cxx:428
 AliHLTDimServer.cxx:429
 AliHLTDimServer.cxx:430
 AliHLTDimServer.cxx:431
 AliHLTDimServer.cxx:432
 AliHLTDimServer.cxx:433
 AliHLTDimServer.cxx:434
 AliHLTDimServer.cxx:435
 AliHLTDimServer.cxx:436
 AliHLTDimServer.cxx:437
 AliHLTDimServer.cxx:438
 AliHLTDimServer.cxx:439
 AliHLTDimServer.cxx:440
 AliHLTDimServer.cxx:441
 AliHLTDimServer.cxx:442
 AliHLTDimServer.cxx:443
 AliHLTDimServer.cxx:444
 AliHLTDimServer.cxx:445
 AliHLTDimServer.cxx:446
 AliHLTDimServer.cxx:447
 AliHLTDimServer.cxx:448
 AliHLTDimServer.cxx:449
 AliHLTDimServer.cxx:450
 AliHLTDimServer.cxx:451
 AliHLTDimServer.cxx:452
 AliHLTDimServer.cxx:453
 AliHLTDimServer.cxx:454
 AliHLTDimServer.cxx:455
 AliHLTDimServer.cxx:456
 AliHLTDimServer.cxx:457
 AliHLTDimServer.cxx:458
 AliHLTDimServer.cxx:459
 AliHLTDimServer.cxx:460
 AliHLTDimServer.cxx:461
 AliHLTDimServer.cxx:462
 AliHLTDimServer.cxx:463
 AliHLTDimServer.cxx:464
 AliHLTDimServer.cxx:465
 AliHLTDimServer.cxx:466
 AliHLTDimServer.cxx:467
 AliHLTDimServer.cxx:468
 AliHLTDimServer.cxx:469
 AliHLTDimServer.cxx:470
 AliHLTDimServer.cxx:471
 AliHLTDimServer.cxx:472
 AliHLTDimServer.cxx:473
 AliHLTDimServer.cxx:474
 AliHLTDimServer.cxx:475
 AliHLTDimServer.cxx:476
 AliHLTDimServer.cxx:477
 AliHLTDimServer.cxx:478
 AliHLTDimServer.cxx:479
 AliHLTDimServer.cxx:480
 AliHLTDimServer.cxx:481