#ifndef ALIHLTMISC_H
#define ALIHLTMISC_H
#include "TObject.h"
#include "AliHLTStdIncludes.h"
#include "AliHLTDataTypes.h"
#include "AliHLTLogging.h"
#include "TClass.h"
#include "TSystem.h"
class AliCDBManager;
class AliCDBEntry;
class AliRawReader;
struct AliHLTComponentDataType;
class AliHLTGlobalTriggerDecision;
class TMap;
class AliHLTMisc : public TObject {
public:
AliHLTMisc();
~AliHLTMisc();
template<class T>
static T* LoadInstance(const T* dummy, const char* classname, const char* library=NULL);
static AliHLTMisc& Instance();
virtual int InitCDB(const char* cdbpath);
virtual int SetCDBRunNo(int runNo);
virtual int GetCDBRunNo() const;
virtual AliCDBEntry* LoadOCDBEntry(const char* path, int runNo=-1) const;
virtual TObject* ExtractObject(AliCDBEntry* entry) const;
virtual int CheckOCDBEntries(const TMap* const pMap) const;
virtual int InitMagneticField() const;
virtual AliHLTTriggerMask_t GetTriggerMask(AliRawReader* rawReader) const;
virtual AliHLTUInt32_t GetTimeStamp(AliRawReader* rawReader) const;
virtual AliHLTUInt32_t GetEventType(AliRawReader* rawReader) const;
virtual Double_t GetBz();
virtual Double_t GetBz(const Double_t *r);
virtual void GetBxByBz(const Double_t r[3], Double_t b[3]);
virtual const TClass* IsAliESDHLTDecision() const;
using TObject::Copy;
virtual int Copy(const AliHLTGlobalTriggerDecision* pDecision, TObject* pESDHLTDecision) const;
virtual int InitStreamerInfos(const char* ocdbEntry) const;
virtual int InitStreamerInfos(TObjArray* pSchemas) const;
virtual int MergeStreamerInfo(TObjArray* tgt, const TObjArray* src, int iVerbosity=0) const;
virtual void SetAliESDtrackOnlineModeFlag(bool mode) const;
virtual bool GetAliESDtrackOnlineModeFlag() const;
class AliOnlineGuard {
public:
AliOnlineGuard(bool mode=true);
~AliOnlineGuard();
private:
bool fMode;
};
private:
static AliHLTMisc* fgInstance;
ClassDef(AliHLTMisc, 0)
};
#define ALIHLTMISC_LIBRARY "libHLTrec.so"
#define ALIHLTMISC_INIT_CDB "AliHLTMiscInitCDB"
#define ALIHLTMISC_SET_CDB_RUNNO "AliHLTMiscSetCDBRunNo"
#ifdef __cplusplus
extern "C" {
#endif
int AliHLTMiscInitCDB(const char* cdbpath);
typedef int (*AliHLTMiscInitCDB_t)(const char* cdbpath);
int AliHLTMiscSetCDBRunNo(int runNo);
typedef int (*AliHLTMiscSetCDBRunNo_t)(int runNo);
#ifdef __cplusplus
}
#endif
template<class T>
T* AliHLTMisc::LoadInstance(const T* , const char* classname, const char* library)
{
int iLibResult=0;
T* pInstance=NULL;
AliHLTLogging log;
TClass* pCl=NULL;
ROOT::NewFunc_t pNewFunc=NULL;
do {
pCl=TClass::GetClass(classname);
} while (!pCl && library!=NULL && (iLibResult=gSystem->Load(library))==0);
if (iLibResult>=0) {
if (pCl && (pNewFunc=pCl->GetNew())!=NULL) {
void* p=(*pNewFunc)(NULL);
if (p) {
pInstance=reinterpret_cast<T*>(p);
} else {
log.Logging(kHLTLogError, "AliHLTMisc::LoadInstance", "HLT Analysis", "can not create instance of type %s from class descriptor", classname);
}
} else {
log.Logging(kHLTLogError, "AliHLTMisc::LoadInstance", "HLT Analysis", "can not find TClass descriptor %s", classname);
}
} else {
log.Logging(kHLTLogError, "AliHLTMisc::LoadInstance", "HLT Analysis", "can not load %s library in order to find class descriptor %s", library, classname);
}
return pInstance;
}
ostream &operator<<(ostream &str, const AliHLTComponentDataType&);
#endif //ALIHLTMISC_H