adding availability check for a list of OCDB objects, code cleanup and updated docume...
[u/mrichter/AliRoot.git] / HLT / BASE / AliHLTMisc.h
index d33cef3..7846f41 100644 (file)
 
 #include "TObject.h"
 #include "AliHLTStdIncludes.h"
+#include "AliHLTDataTypes.h"
+#include "AliHLTLogging.h"
+#include "TClass.h"
+#include "TSystem.h"
 
 class AliCDBManager;
 class AliCDBEntry;
+class AliRawReader;
 class AliHLTComponentDataType;
+class AliHLTGlobalTriggerDecision;
+class TMap;
 
 class AliHLTMisc : public TObject {
  public:
@@ -26,17 +33,36 @@ class AliHLTMisc : public TObject {
   ~AliHLTMisc();
 
   template<class T>
-  static T* LoadInstance(const T* dummy, const char* classname, const char* library);
+  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, int version = -1, int subVersion = -1);
+  /// Load an OCDB object
+  virtual AliCDBEntry* LoadOCDBEntry(const char* path, int runNo=-1, int version = -1, int subVersion = -1) const;
 
-  virtual TObject* ExtractObject(AliCDBEntry* entry);
+  // Extract the TObject instance from the CDB object
+  virtual TObject* ExtractObject(AliCDBEntry* entry) const;
+
+  /// check the availability of the OCDB entry descriptions in the TMap
+  ///  key : complete OCDB path of the entry
+  ///  value : auxiliary object - short description
+  virtual int CheckOCDBEntries(const TMap* const pMap) const;
+
+  virtual int InitMagneticField() const;
+
+  virtual AliHLTUInt64_t GetTriggerMask(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;
+  virtual int Copy(const AliHLTGlobalTriggerDecision* pDecision, TObject* pESDHLTDecision) const;
 
  private:
   static AliHLTMisc* fgInstance;
@@ -80,6 +106,38 @@ extern "C" {
 }
 #endif
 
+template<class T>
+T* AliHLTMisc::LoadInstance(const T* /*t*/, const char* classname, const char* library)
+{
+  // see header file for function documentation
+  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);
+       if (!pInstance) {
+         log.Logging(kHLTLogError, "AliHLTMisc::LoadInstance", "HLT Analysis", "type cast (%s) to instance failed", classname);
+       }
+      } 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;
+}
+
 // direct printout of data type struct
 ostream  &operator<<(ostream &str, const AliHLTComponentDataType&);