X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;ds=sidebyside;f=HLT%2FBASE%2FAliHLTDAQ.cxx;h=38d2a647c37d6a6e61f36b885a52f2534386681a;hb=a6efb75f591b967782c13a17820cb5e4dde9c6b8;hp=ffcc96b52c4e0c1cc40181b7b5a4fe1e2069a97a;hpb=7c4d1228d66a865084e803ba071b5014092338b5;p=u%2Fmrichter%2FAliRoot.git diff --git a/HLT/BASE/AliHLTDAQ.cxx b/HLT/BASE/AliHLTDAQ.cxx index ffcc96b52c4..38d2a647c37 100644 --- a/HLT/BASE/AliHLTDAQ.cxx +++ b/HLT/BASE/AliHLTDAQ.cxx @@ -16,14 +16,16 @@ //* provided "as is" without express or implied warranty. * //************************************************************************** -/** @file AliHLTDAQ.cxx - @author Matthias Richter - @date 24.10.2008 - @brief Virtual Interface to the AliDAQ class. -*/ +/// @file AliHLTDAQ.cxx +/// @author Matthias Richter +/// @date 24.10.2008 +/// @brief Virtual Interface to the AliDAQ class. +/// #include "AliHLTDAQ.h" #include "AliHLTLogging.h" +#include "AliHLTDataTypes.h" +#include "AliHLTMisc.h" #include "TClass.h" #include "TSystem.h" @@ -42,31 +44,85 @@ AliHLTDAQ::AliHLTDAQ() AliHLTDAQ* AliHLTDAQ::fgpInstance=NULL; const char* AliHLTDAQ::fgkImplName="AliHLTDAQInterfaceImplementation"; const char* AliHLTDAQ::fgkImplLibrary="libHLTrec.so"; +const char* AliHLTDAQ::fgkOriginMapping[] = { + kAliHLTDataOriginITSSPD, + kAliHLTDataOriginITSSDD, + kAliHLTDataOriginITSSSD, + kAliHLTDataOriginTPC, + kAliHLTDataOriginTRD, + kAliHLTDataOriginTOF, + kAliHLTDataOriginHMPID, + kAliHLTDataOriginPHOS, + kAliHLTDataOriginCPV, + kAliHLTDataOriginPMD, + kAliHLTDataOriginMUON, + "", // MUONTRG + kAliHLTDataOriginFMD, + kAliHLTDataOriginT0, + kAliHLTDataOriginVZERO, + kAliHLTDataOriginZDC, + kAliHLTDataOriginACORDE, + kAliHLTDataOriginTRG, + kAliHLTDataOriginEMCAL, + NULL +}; AliHLTDAQ::~AliHLTDAQ() { // see header file for class documentation } -Int_t AliHLTDAQ::DetectorID(const char *detectorName) +Int_t AliHLTDAQ::NumberOfDetectors() { // see header file for class documentation if (!fgpInstance) GetInstance(); + if (fgpInstance) return fgpInstance->VirtNumberOfDetectors(); + return -1; +} + +Int_t AliHLTDAQ::DetectorID(const char *detectorName) +{ + // get the detector ID from the detector name + // forwards to AliDAQ::DetectorName + if (!fgpInstance) GetInstance(); if (fgpInstance) return fgpInstance->VirtDetectorID(detectorName); return -1; } const char *AliHLTDAQ::DetectorName(Int_t detectorID) { - // see header file for class documentation + // get the detector name from the detector ID + // forwards to AliDAQ::DetectorName if (!fgpInstance) GetInstance(); if (fgpInstance) return fgpInstance->VirtDetectorName(detectorID); return NULL; } +Int_t AliHLTDAQ::DetectorIDFromHLTOrigin(const char dataorigin[kAliHLTComponentDataTypefOriginSize]) +{ + // get the detector id from HLT origin + for (int i=0; fgkOriginMapping[i]!=NULL; i++) { + if (strncmp(fgkOriginMapping[i], dataorigin, kAliHLTComponentDataTypefOriginSize)==0) { + return i; + } + } + + return -1; +} + +const char *AliHLTDAQ::DetectorName(const char dataorigin[kAliHLTComponentDataTypefOriginSize]) +{ + // get the detector name from HLT origin + Int_t detectorID=DetectorIDFromHLTOrigin(dataorigin); + if (detectorID<0) return NULL; + + return DetectorName(detectorID); +} + Int_t AliHLTDAQ::DdlIDOffset(const char *detectorName) { - // see header file for class documentation + // get ID of the first DDL of a detector + // forwards to AliDAQ::DdlIDOffset if (!fgpInstance) GetInstance(); if (fgpInstance) return fgpInstance->VirtDdlIDOffset(detectorName); return -1; @@ -74,7 +130,8 @@ Int_t AliHLTDAQ::DdlIDOffset(const char *detectorName) Int_t AliHLTDAQ::DdlIDOffset(Int_t detectorID) { - // see header file for class documentation + // get ID of the first DDL of a detector + // forwards to AliDAQ::DdlIDOffset if (!fgpInstance) GetInstance(); if (fgpInstance) return fgpInstance->VirtDdlIDOffset(detectorID); return -1; @@ -82,7 +139,8 @@ Int_t AliHLTDAQ::DdlIDOffset(Int_t detectorID) const char *AliHLTDAQ::DetectorNameFromDdlID(Int_t ddlID, Int_t &ddlIndex) { - // see header file for class documentation + // get detector name from global DDL ID and index of DDL within the detector + // forwards to AliDAQ::DetectorNameFromDdlID if (!fgpInstance) GetInstance(); if (fgpInstance) return fgpInstance->VirtDetectorNameFromDdlID(ddlID, ddlIndex); return NULL; @@ -90,7 +148,8 @@ const char *AliHLTDAQ::DetectorNameFromDdlID(Int_t ddlID, Int_t &ddlIndex) Int_t AliHLTDAQ::DetectorIDFromDdlID(Int_t ddlID, Int_t &ddlIndex) { - // see header file for class documentation + // get detector ID from global DDL ID and index of DDL within the detector + // forwards to AliDAQ::DetectorNameFromDdlID if (!fgpInstance) GetInstance(); if (fgpInstance) return fgpInstance->VirtDetectorIDFromDdlID(ddlID, ddlIndex); return -1; @@ -98,7 +157,8 @@ Int_t AliHLTDAQ::DetectorIDFromDdlID(Int_t ddlID, Int_t &ddlIndex) Int_t AliHLTDAQ::DdlID(const char *detectorName, Int_t ddlIndex) { - // see header file for class documentation + // get global DDL ID from detector name and index of DDL within the detector + // forwards to AliDAQ::DdlID if (!fgpInstance) GetInstance(); if (fgpInstance) return fgpInstance->VirtDdlID(detectorName, ddlIndex); return -1; @@ -106,7 +166,8 @@ Int_t AliHLTDAQ::DdlID(const char *detectorName, Int_t ddlIndex) Int_t AliHLTDAQ::DdlID(Int_t detectorID, Int_t ddlIndex) { - // see header file for class documentation + // get global DDL ID from detector ID and index of DDL within the detector + // forwards to AliDAQ::DdlID if (!fgpInstance) GetInstance(); if (fgpInstance) return fgpInstance->VirtDdlID(detectorID, ddlIndex); return -1; @@ -144,33 +205,163 @@ Int_t AliHLTDAQ::NumberOfDdls(Int_t detectorID) return -1; } -AliHLTDAQ* AliHLTDAQ::GetInstance() +const char *AliHLTDAQ::ListOfTriggeredDetectors(UInt_t detectorPattern) { // see header file for class documentation - int iLibResult=0; - if (!fgpInstance) { + if (!fgpInstance) GetInstance(); + if (fgpInstance) return fgpInstance->VirtListOfTriggeredDetectors(detectorPattern); + return NULL; +} + +UInt_t AliHLTDAQ::DetectorPattern(const char *detectorList) +{ + // see header file for class documentation + if (!fgpInstance) GetInstance(); + if (fgpInstance) return fgpInstance->VirtDetectorPattern(detectorList); + return 0; +} + +const char *AliHLTDAQ::OfflineModuleName(const char *detectorName) +{ + // see header file for class documentation + if (!fgpInstance) GetInstance(); + if (fgpInstance) return fgpInstance->VirtOfflineModuleName(detectorName); + return NULL; +} +const char *AliHLTDAQ::OfflineModuleName(Int_t detectorID) +{ + // see header file for class documentation + if (!fgpInstance) GetInstance(); + if (fgpInstance) return fgpInstance->VirtOfflineModuleName(detectorID); + return NULL; +} + +const char *AliHLTDAQ::OnlineName(const char *detectorName) +{ + // see header file for class documentation + if (!fgpInstance) GetInstance(); + if (fgpInstance) return fgpInstance->VirtOnlineName(detectorName); + return NULL; +} +const char *AliHLTDAQ::OnlineName(Int_t detectorID) +{ + // see header file for class documentation + if (!fgpInstance) GetInstance(); + if (fgpInstance) return fgpInstance->VirtOnlineName(detectorID); + return NULL; +} + +string AliHLTDAQ::HLTOrigin(const char *detectorName) +{ + // get HLT origin from detector name + return HLTOrigin(DetectorID(detectorName)); +} + +string AliHLTDAQ::HLTOrigin(Int_t detectorID) +{ + // get HLT origin from detector ID + string origin; + if (detectorID>=0 && (unsigned)detectorID>8) &0xff; + int minSlice =(specification>>16)&0xff; + int maxSlice =(specification>>24)&0xff; + if (minPartition<0 || minPartition>5 || + maxPartition<0 || maxPartition>5 || + minSlice<0 || minSlice>35 || + maxSlice<0 || maxSlice>35) { + AliHLTLogging log; + log.Logging(kHLTLogError, "AliHLTDAQ::DdlID", "HLT Analysis", "invalid data specification 0x%08x", specification); + return -1; + } + else if (minPartition!=maxPartition || + minSlice!=maxSlice) { + AliHLTLogging log; + log.Logging(kHLTLogError, "AliHLTDAQ::DdlID", "HLT Analysis", "ambiguous data specification 0x%08x", specification); + return -1; + } + if (minPartition<2) ddlID+=2*minSlice+minPartition; // inner sector + else ddlID+=4*minSlice+(minPartition-2)+72; // outer sector + } + else if (detectorID == DetectorID("TOF")) { AliHLTLogging log; - TClass* pCl=NULL; - ROOT::NewFunc_t pNewFunc=NULL; - do { - pCl=TClass::GetClass(fgkImplName); - } while (!pCl && (iLibResult=gSystem->Load(fgkImplLibrary))==0); - if (iLibResult>=0) { - if (pCl && (pNewFunc=pCl->GetNew())!=NULL) { - void* p=(*pNewFunc)(NULL); - if (p) { - fgpInstance=reinterpret_cast(p); - if (!fgpInstance) { - log.Logging(kHLTLogError, "AliHLTDAQ::Instance", "HLT Analysis", "type cast to AliHLTDAQ instance failed"); - } - } else { - log.Logging(kHLTLogError, "AliHLTDAQ::Instance", "HLT Analysis", "can not create AliHLTDAQ instance from class descriptor"); - } - } else { - log.Logging(kHLTLogError, "AliHLTDAQ::Instance", "HLT Analysis", "can not find AliHLTDAQ class descriptor"); + log.Logging(kHLTLogWarning, "AliHLTDAQ::DdlID", "HLT Analysis", "Mapping of data specification not implemented for TOF"); + return -1; + } + else { // default + for (int i=0; i<32; i++) { + if ((specification&(0x1<