moved HLT preprocessor to libHLTshuttle; added HLT module preprocessor framework...
authorrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 21 Jan 2008 21:37:21 +0000 (21:37 +0000)
committerrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 21 Jan 2008 21:37:21 +0000 (21:37 +0000)
22 files changed:
HLT/BASE/AliHLTModuleAgent.cxx
HLT/BASE/AliHLTModuleAgent.h
HLT/Makefile.am
HLT/SampleLib/AliHLTAgentSample.cxx
HLT/SampleLib/AliHLTAgentSample.h
HLT/SampleLib/AliHLTSamplePreprocessor.cxx [new file with mode: 0644]
HLT/SampleLib/AliHLTSamplePreprocessor.h [new file with mode: 0644]
HLT/comp/AliHLTCompAgent.cxx
HLT/comp/AliHLTCompAgent.h
HLT/comp/AliHLTCompPreprocessor.cxx [new file with mode: 0644]
HLT/comp/AliHLTCompPreprocessor.h [new file with mode: 0644]
HLT/configure.ac
HLT/libAliHLTComp.pkg
HLT/libAliHLTSample.pkg
HLT/libHLTrec.pkg
HLT/rec/AliHLTPreprocessor.cxx [deleted file]
HLT/rec/AliHLTPreprocessor.h [deleted file]
HLT/shuttle/AliHLTModulePreprocessor.cxx [new file with mode: 0644]
HLT/shuttle/AliHLTModulePreprocessor.h [new file with mode: 0644]
HLT/shuttle/AliHLTPreprocessor.cxx [new file with mode: 0644]
HLT/shuttle/AliHLTPreprocessor.h [new file with mode: 0644]
HLT/shuttle/Makefile.am [new file with mode: 0644]

index ce20354..bc09db8 100644 (file)
@@ -162,6 +162,12 @@ int AliHLTModuleAgent::RegisterComponents(AliHLTComponentHandler* /*pHandler*/)
   return 0;
 }
 
+AliHLTModulePreprocessor* AliHLTModuleAgent::GetPreprocessor()
+{
+  // default method, nothing to be done, child classes can overload
+  return NULL;
+}
+
 AliHLTModuleAgent* AliHLTModuleAgent::fAnchor=NULL;
 AliHLTModuleAgent* AliHLTModuleAgent::fCurrent=NULL;
 int AliHLTModuleAgent::fCount=0;
index 4aca51d..c588d43 100644 (file)
@@ -33,6 +33,7 @@ class AliRawReader;
 class AliRawStream;
 class AliHLTOUTHandler;
 class AliHLTOUT;
+class AliHLTModulePreprocessor;
 
 /**
  * @class AliHLTModuleAgent
@@ -313,6 +314,14 @@ class AliHLTModuleAgent : public TObject, public AliHLTLogging {
 //                                  const AliHLTOUT* pData);
 
   /**
+   * Get the preprocessor for this component library.
+   * Create an instance of the preprocessor for this component library.
+   * The caller will delete it after useage.
+   * @return pointer to AliHLTModulePreprocessor object.
+   */
+  virtual AliHLTModulePreprocessor* GetPreprocessor();
+
+  /**
    * Old method kept for backward compatibility, redirected to @ref
    * GetReconstructionChains.
    */
index 32d34d5..62f06df 100644 (file)
@@ -33,6 +33,7 @@ TRIGGER_DIR=trigger
 SUBDIRS                = BASE \
                          sim \
                          rec \
+                         shuttle \
                          $(SAMPLE_DIR) \
                          $(TPC_DIR) \
                          $(PHOS_DIR) \
index 5a8f3d6..1c8d80d 100644 (file)
@@ -30,6 +30,9 @@
 // header files of library components
 #include "AliHLTDummyComponent.h"
 
+// header file of the module preprocessor
+#include "AliHLTSamplePreprocessor.h"
+
 /** global instance for agent registration */
 AliHLTAgentSample gAliHLTAgentSample;
 
@@ -118,3 +121,8 @@ int AliHLTAgentSample::RegisterComponents(AliHLTComponentHandler* pHandler) cons
   return 0;
 }
 
+AliHLTModulePreprocessor* AliHLTAgentSample::GetPreprocessor()
+{
+  // see header file for class documentation
+  return new AliHLTSamplePreprocessor;
+}
index eafd2ad..506d83e 100644 (file)
@@ -99,6 +99,8 @@ class AliHLTAgentSample : public AliHLTModuleAgent {
    * @param pHandler  [in] instance of the component handler          
    */
   int RegisterComponents(AliHLTComponentHandler* pHandler) const;
+
+  AliHLTModulePreprocessor* GetPreprocessor();
  protected:
 
  private:
diff --git a/HLT/SampleLib/AliHLTSamplePreprocessor.cxx b/HLT/SampleLib/AliHLTSamplePreprocessor.cxx
new file mode 100644 (file)
index 0000000..9e6ed36
--- /dev/null
@@ -0,0 +1,123 @@
+// $Id: AliHLTSamplePreprocessor.cxx 23039 2007-12-13 20:53:02Z richterm $
+
+/**************************************************************************
+ * This file is property of and copyright by the ALICE HLT Project        * 
+ * ALICE Experiment at CERN, All rights reserved.                         *
+ *                                                                        *
+ * Primary Authors: Sebastian Bablok <Sebastian.Bablok@ift.uib.no>        *
+ *                  Kenneth Aamodt                                        *
+ *                  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   AliHLTSamplePreprocessor.cxx
+ * @author Kenneth Aamodt, Sebastian Bablok
+ * @date   2007-12-06
+ * @update 2008-01-22 formerly AliHLTPreprocessor splitted into modules
+ * @brief  HLT Preprocessor plugin for the AliHLTComp library
+ */
+
+#include "AliHLTSamplePreprocessor.h"
+#include "AliPreprocessor.h"
+
+#include <AliCDBMetaData.h>
+#include <TObjString.h>
+#include <TString.h>
+#include <TList.h>
+#include <TFile.h>
+
+ClassImp(AliHLTSamplePreprocessor)
+
+AliHLTSamplePreprocessor::AliHLTSamplePreprocessor()
+{
+  // see header file for class documentation
+  // or
+  // refer to README to build package
+  // or
+  // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
+}
+
+const char* AliHLTSamplePreprocessor::fgkTempHistoFileName = "HLTTemperatureHistograms.root";
+
+AliHLTSamplePreprocessor::~AliHLTSamplePreprocessor()
+{
+  // see header file for function documentation
+}
+
+void AliHLTSamplePreprocessor::Initialize(Int_t run, UInt_t startTime, 
+                                   UInt_t endTime)
+{
+}
+
+
+UInt_t AliHLTSamplePreprocessor::Process(TMap* dcsAliasMap)
+{
+  // see header file for function documentation
+  UInt_t retVal = 0;
+  if (GetTempHisto() != 0) {
+    // unable to fetch the temperature histogram from HLT
+    retVal = 1;
+    // but if set to 1, then also file from GetHuffmanTables won't be saved !!!
+  }
+
+  return retVal;
+}
+
+UInt_t AliHLTSamplePreprocessor::GetTempHisto()
+{
+  // see header file for function documentation
+
+       UInt_t retVal = 0;
+    // get Temp Histogram map
+    TList* HLTlist = GetFileSources(AliPreprocessor::kHLT, fgkTempHistoFileName);
+    if (!HLTlist) {
+        Log("Missing list for the HLT");
+   
+        return 1;
+    }
+
+       if (HLTlist->GetSize() == 0) {
+               Log("No Temperature histogram produced inside the HLT by a DA for this run.");
+               return retVal; 
+               // return no error -> DA might not have run, but other file shall be saved.
+       } else if (HLTlist->GetSize() > 1) {
+        Log(Form("Problem on the size of the list: %d (HLT)", HLTlist->GetSize()));
+        return 0; // might have to be changed, when there will be more than one histogram file
+    }
+
+    TObjString* location = (TObjString*) HLTlist->At(0);
+    if (location == 0) {
+        Log("Error in location HLT list.");
+        return 0;
+    }
+    TString localFileName = GetFile(AliPreprocessor::kHLT, fgkTempHistoFileName,
+                location->String().Data());
+       if (!(localFileName.Length() > 0)) {
+               Log("Local file name for Temperature Histogram has zero length.");
+               return 1;
+       }
+       
+/*
+    TFile localFile(localFileName);
+    AliCDBMetaData meta("Sebastian Bablok");
+
+    if (!(Store("Calib", kTempHistoFileName, (TObject*) &localFile, &meta, 0, kTRUE))) {
+*/
+    if (!(StoreReferenceFile(localFileName.Data(), fgkTempHistoFileName))) {
+        TString msg("Storing of object '");
+        msg += fgkTempHistoFileName;
+        msg += "' to Reference Storage failed!";
+        Log(msg.Data());
+        retVal = 1;
+    }
+
+       return retVal;
+}
diff --git a/HLT/SampleLib/AliHLTSamplePreprocessor.h b/HLT/SampleLib/AliHLTSamplePreprocessor.h
new file mode 100644 (file)
index 0000000..4623b3c
--- /dev/null
@@ -0,0 +1,85 @@
+//-*- Mode: C++ -*-
+// @(#) $Id: AliHLTSamplePreprocessor.h 23318 2008-01-14 12:43:28Z hristov $
+
+#ifndef ALIHLTSAMPLEPREPROCESSOR_H
+#define ALIHLTSAMPLEPREPROCESSOR_H
+//* This file is property of and copyright by the ALICE HLT Project        * 
+//* ALICE Experiment at CERN, All rights reserved.                         *
+//* See cxx source for full Copyright notice                               */
+
+/**
+ * @file   AliHLTSamplePreprocessor.h
+ * @author Kenneth Aamodt, Sebastian Bablok
+ * @date   2007-12-06
+ * @update 2008-01-22 formerly AliHLTPreprocessor splitted into modules
+ * @brief  HLT Preprocessor plugin for the AliHLTComp library
+ */
+
+// see below for class documentation
+// or
+// refer to README to build package
+// or
+// visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
+
+#include "AliHLTModulePreprocessor.h"
+
+/**
+ * @class AliHLTSamplePreprocessor
+ * HLT preprocessor for the libAliHLTComp module.
+ *
+ * @author Jenny Wagner, Matthias Richter
+ *
+ * @date 2008-01-22
+ */
+class AliHLTSamplePreprocessor : public AliHLTModulePreprocessor
+{
+ public:
+       
+  /** Constructor */
+  AliHLTSamplePreprocessor();
+
+  /** Destructor */
+  ~AliHLTSamplePreprocessor();
+
+  /**
+   * Initialize the Preprocessor.
+   *
+   * @param run run number
+   * @param startTime start time of data
+   * @param endTime end time of data
+   */
+  void Initialize(Int_t run, UInt_t startTime, UInt_t endTime);
+
+  /**
+   * Function to process data. Inside the preparation and storing to OCDB
+   * should be handled.
+   *
+   * @param dcsAliasMap the map containing aliases and corresponding DCS
+   *                   values and timestamps
+   *
+   * @return 0 on success; error code otherwise
+   */
+  UInt_t Process(TMap* dcsAliasMap);
+
+  /** Define for Temperature Histogram filename */
+  static const char* fgkTempHistoFileName;             // see above
+
+ protected:
+
+ private:
+  /** copy constructor prohibited */
+  AliHLTSamplePreprocessor(const AliHLTSamplePreprocessor& preproc);
+  /** assignment operator prohibited */
+  AliHLTSamplePreprocessor& operator=(const AliHLTSamplePreprocessor& rhs);
+
+  /**
+   * Function fetch and prepare a dummy temperature histogram from the 
+   * HLT FXS.
+   *
+   * @return 0 in case of success, else an error code
+   */
+  UInt_t GetTempHisto();
+               
+  ClassDef(AliHLTSamplePreprocessor, 0);
+};
+#endif
index a014042..e90dc5d 100644 (file)
@@ -37,6 +37,9 @@
 #include "AliHLTCOMPHuffmanAltroComponent.h"
 #include "AliHLTCOMPHuffmanAltroCalibComponent.h"
 
+// header file of the module preprocessor
+#include "AliHLTCompPreprocessor.h"
+
 /** global instance for agent registration */
 AliHLTCompAgent gAliHLTCompAgent;
 
@@ -94,3 +97,9 @@ int AliHLTCompAgent::RegisterComponents(AliHLTComponentHandler* pHandler) const
 
   return 0;
 }
+
+AliHLTModulePreprocessor* AliHLTCompAgent::GetPreprocessor()
+{
+  // see header file for class documentation
+  return new AliHLTCompPreprocessor;
+}
index 3d751a7..c30a59c 100644 (file)
@@ -72,6 +72,8 @@ class AliHLTCompAgent : public AliHLTModuleAgent {
    * @param pHandler  [in] instance of the component handler          
    */
   int RegisterComponents(AliHLTComponentHandler* pHandler) const;
+
+  AliHLTModulePreprocessor* GetPreprocessor();
  protected:
 
  private:
diff --git a/HLT/comp/AliHLTCompPreprocessor.cxx b/HLT/comp/AliHLTCompPreprocessor.cxx
new file mode 100644 (file)
index 0000000..186e2aa
--- /dev/null
@@ -0,0 +1,220 @@
+// $Id: AliHLTCompPreprocessor.cxx 23039 2007-12-13 20:53:02Z richterm $
+
+//**************************************************************************
+//* 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>        *
+//*                  Jenny Wagner                                          *
+//*                  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   AliHLTCompPreprocessor.cxx
+ * @author Jenny Wagner, Matthias Richter
+ * @brief  Implementation of the HLT preprocessor for the AliHLTComp library
+ */
+
+#include "AliHLTCompPreprocessor.h"
+#include "AliCDBMetaData.h"
+#include "AliPreprocessor.h"
+#include "TObjString.h"
+#include "TString.h"
+#include "TList.h"
+#include "TFile.h"
+
+// necessary for huffman table to get information about the origin
+#include "AliHLTCOMPHuffmanData.h"
+
+ClassImp(AliHLTCompPreprocessor)
+
+AliHLTCompPreprocessor::AliHLTCompPreprocessor() 
+{
+  // see header file for class documentation
+  // or
+  // refer to README to build package
+  // or
+  // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
+}
+
+const char* AliHLTCompPreprocessor::fgkHuffmanFileId = "HuffmanData";
+
+AliHLTCompPreprocessor::~AliHLTCompPreprocessor()
+{
+  // see header file for function documentation
+}
+
+void AliHLTCompPreprocessor::Initialize(Int_t run, UInt_t startTime, 
+                                       UInt_t endTime)
+{
+  // see header file for function documentation
+}
+
+
+UInt_t AliHLTCompPreprocessor::Process(TMap* dcsAliasMap)
+{
+  // see header file for function documentation
+  UInt_t retVal = 0;
+
+  if (GetHuffmanTables() != 0) {
+    // unable to fetch Huffman tables
+    retVal = 1; 
+    // but if set to 1, then also file from GetTempHisto won't be saved !!!
+  }
+       
+  return retVal;
+}
+
+UInt_t AliHLTCompPreprocessor::GetHuffmanTables() 
+{
+  // see header file for function documentation
+
+  UInt_t retVal = 0;
+
+  // get all huffman tables stored at FXS      
+  TList* HuffmanList = GetFileSources(AliPreprocessor::kHLT, fgkHuffmanFileId);
+  // -> list of all DDL numbers that own a huffman table
+
+  // if no huffman tables are produced, return 0 (successful end --> test if TPC, PHOS are used in current run!)
+  // --> still open to be implemented!
+  // if there is an error getting the sources return 1
+  // else produce containers for each detector to be stored in the OCDB
+  if (!HuffmanList) 
+    {
+      Log("No Huffman code tables for HLT");
+      return 1;
+    }
+         
+  TList* TPCHuffmanList = new TList();
+  TList* PHOSHuffmanList = new TList();
+       
+  // loop over all DDL numbers and put huffman tables into special containers
+  // (one for each detector)
+  for(Int_t ii=0; ii < HuffmanList->GetEntries(); ii++)
+    {
+      // get huffman table
+      TObjString *objstr = (TObjString*) HuffmanList->At(ii);
+
+      if(objstr == 0) // should not happen?! 
+       {
+         char logging[1000];
+         sprintf(logging, "Error in Huffmanlist, no DDL at position %d", ii);
+         Log(logging);
+         continue;
+       }
+
+      TString fileName = GetFile(AliPreprocessor::kHLT, "HuffmanData", objstr->GetName());
+
+      if (!(fileName.Length() > 0)) // error if local path/filename is not defined
+       {
+         Log("Local file for current Huffman table is not properly defined.");
+         return 1;
+       }
+
+      TFile* currenthuffmanfile = new TFile(fileName, "READ");
+
+      // if current huffman table file does not contain a table, return an error
+      if ( currenthuffmanfile->Get("fHuffmanData") == NULL)
+       {
+         char logging[1000];
+         sprintf(logging,"Local file %s does not contain a Huffman code table.", fileName.Data());
+         Log(logging);
+         //retVal = 1; // retVal must be zero to give other functions a chance to read their data
+         retVal = 0;
+       }
+           
+      TObject* huffmandata = (TObject*) currenthuffmanfile->Get("fHuffmanData");
+      AliHLTCOMPHuffmanData* currenthuffmandata = (AliHLTCOMPHuffmanData*) huffmandata;
+
+      // specifications necessary for sorting process
+      TString detectororigin = "";//currenthuffmandata->GetOrigin();
+      Int_t tablespec = 0;//currenthuffmandata->GetDataSpec();
+          
+           
+      // plug them into a container:
+      if(detectororigin == "PHOS") // belongs to PHOS table (one one!)
+       {
+         PHOSHuffmanList->AddFirst(huffmandata);
+
+         if(PHOSHuffmanList->GetEntries() > 1)
+           {
+             Log("More than one table available for PHOS.");
+             // return: warning but go on...
+           }
+       }
+      else
+       {
+         if(detectororigin == "TPC ") // belongs to TPC tables (six)
+           {
+             if(tablespec < 6)
+               {
+                 TPCHuffmanList->Add(huffmandata);
+
+                 if(TPCHuffmanList->GetEntries() > 6)
+                   {
+                     Log("More than six tables available for TPC.");
+                     // return warning but go on...
+                   }
+               }
+             else
+               {
+                 char logging[1000];
+                 sprintf(logging, "Read data specification %d from Huffman table too large to belong to TPC.", tablespec);
+                 Log(logging);
+                 // retVal = 1; // retVal must be zero to give other functions a chance to read their data
+                 retVal = 0;
+               }
+           }
+         else // error! 
+           {
+             char logging[1000];
+             sprintf(logging, "Specified detector pattern %s does not define a valid detector.", detectororigin.Data());
+             Log(logging);
+             // retVal = 1; // retVal must be zero to give other functions a chance to read their data
+             retVal = 0;
+           }
+       }
+
+           
+    } // end loop over all DDLs
+
+   
+  // after loop all containers are filled and can be stored in OCDB
+  AliCDBMetaData meta("Jenny Wagner");
+
+  if (!(Store("CalibTPC", "HuffmanCodeTables", (TObject*) TPCHuffmanList, &meta, 0, kTRUE))) 
+    {
+
+      Log("Storing of TPCHuffmanList (Huffman code tables for TPC) to OCDB failed.");
+
+      if (!(StoreReferenceData("CalibTPC", "HuffmanCodeTables", (TObject*) TPCHuffmanList, &meta)))
+       {
+         Log("Storing of TPCHuffmanList (Huffman code tables for TPC) to reference storage failed.");
+
+         retVal = 1;
+       }
+    }
+       
+  if (!(Store("CalibPHOS", "HuffmanCodeTables", (TObject*) PHOSHuffmanList, &meta, 0, kTRUE))) 
+    {
+
+      Log("Storing of PHOSHuffmanList (Huffman code table for PHOS) to OCDB failed.");
+
+      if (!(StoreReferenceData("CalibPHOS", "HuffmanCodeTables", (TObject*) PHOSHuffmanList, &meta)))
+       {
+         Log("Storing of PHOSHuffmanList (Huffman code table for PHOS) to reference storage failed.");
+
+         retVal = 1;
+       }
+    }
+
+  return retVal;
+}
diff --git a/HLT/comp/AliHLTCompPreprocessor.h b/HLT/comp/AliHLTCompPreprocessor.h
new file mode 100644 (file)
index 0000000..111ee95
--- /dev/null
@@ -0,0 +1,82 @@
+//-*- Mode: C++ -*-
+// @(#) $Id: AliHLTCompPreprocessor.h 23318 2008-01-14 12:43:28Z hristov $
+
+#ifndef ALIHLTCOMPPREPROCESSOR_H
+#define ALIHLTCOMPPREPROCESSOR_H
+//* This file is property of and copyright by the ALICE HLT Project        * 
+//* ALICE Experiment at CERN, All rights reserved.                         *
+//* See cxx source for full Copyright notice                               */
+
+/**
+ * @file   AliHLTCompPreprocessor.h
+ * @author Jenny Wagner, Matthias Richter
+ * @brief  HLT Preprocessor plugin for the AliHLTComp library
+ */
+
+// see below for class documentation
+// or
+// refer to README to build package
+// or
+// visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
+
+#include "AliHLTModulePreprocessor.h"
+
+/**
+ * @class AliHLTCompPreprocessor
+ * HLT preprocessor for the libAliHLTComp module.
+ *
+ * @author Jenny Wagner, Matthias Richter
+ *
+ * @date 2008-01-22
+ */
+class AliHLTCompPreprocessor : public AliHLTModulePreprocessor
+{
+ public:
+       
+  /** Constructor */
+  AliHLTCompPreprocessor();
+
+  /** Destructor */
+  ~AliHLTCompPreprocessor();
+
+  /**
+   * Initialize the Preprocessor.
+   *
+   * @param run run number
+   * @param startTime start time of data
+   * @param endTime end time of data
+   */
+  void Initialize(Int_t run, UInt_t startTime, UInt_t endTime);
+
+  /**
+   * Function to process data. Inside the preparation and storing to OCDB
+   * should be handled.
+   *
+   * @param dcsAliasMap the map containing aliases and corresponding DCS
+   *                   values and timestamps
+   *
+   * @return 0 on success; error code otherwise
+   */
+  UInt_t Process(TMap* dcsAliasMap);
+
+  /** Define name of huffman tables stored at FXS */
+  static const char* fgkHuffmanFileId;                 // see above
+
+ protected:
+
+ private:
+  /** copy constructor prohibited */
+  AliHLTCompPreprocessor(const AliHLTCompPreprocessor& preproc);
+  /** assignment operator prohibited */
+  AliHLTCompPreprocessor& operator=(const AliHLTCompPreprocessor& rhs);
+
+  /**
+   * Function fetch and prepare the Huffman tables from the HLT FXS
+   *
+   * @return 0 in case of success, else an error code
+   */
+  UInt_t GetHuffmanTables();
+               
+  ClassDef(AliHLTCompPreprocessor, 0);
+};
+#endif
index 244a9fa..9b72f76 100644 (file)
@@ -772,6 +772,7 @@ AC_CONFIG_FILES([Makefile
                 BASE/test/Makefile
                 sim/Makefile
                 rec/Makefile
+                shuttle/Makefile
                 SampleLib/Makefile
                 TPCLib/Makefile
                 TPCLib/mapping2array.cxx
index 69886a2..12cba5e 100644 (file)
@@ -4,6 +4,7 @@
 include $(MODDIR)/hlt.conf
 
 CLASS_HDRS:=   AliHLTCompAgent.h \
+               AliHLTCompPreprocessor.h \
                AliHLTCompDefinitions.h \
                AliHLTCOMPHuffmanAltro.h \
                AliHLTCOMPHuffmanAltroComponent.h \
@@ -18,7 +19,7 @@ MODULE_HDRS:=         $(CLASS_HDRS)
 
 MODULE_DHDR:=          
 
-EINCLUDE := HLT/BASE HLT/TPCLib
+EINCLUDE := HLT/BASE HLT/shuttle HLT/TPCLib STEER
 
 ###############################################################################
 #
index ae44e8e..b375f8f 100644 (file)
@@ -10,6 +10,7 @@
 MODULE_SRCS=   AliHLTSampleComponent1.cxx \
                AliHLTSampleComponent2.cxx \
                AliHLTAgentSample.cxx \
+               AliHLTSamplePreprocessor.cxx \
                AliHLTSampleOfflineSinkComponent.cxx \
                AliHLTDummyComponent.cxx
 
@@ -18,6 +19,7 @@ MODULE_SRCS=  AliHLTSampleComponent1.cxx \
 CLASS_HDRS:=   AliHLTSampleComponent1.h \
                AliHLTSampleComponent2.h \
                AliHLTAgentSample.h \
+               AliHLTSamplePreprocessor.h \
                AliHLTSampleOfflineSinkComponent.h \
                AliHLTDummyComponent.h
 
@@ -46,7 +48,7 @@ PACKCXXFLAGS := $(filter-out -ansi,$(filter-out -pedantic-errors, $(CXXFLAGS)))
 PACKCFLAGS   := $(filter-out -ansi, $(filter-out -pedantic-errors, $(CFLAGS)))
 PACKDCXXFLAGS:= $(filter-out -pedantic-errors, $(CXXFLAGS))
 
-EINCLUDE := HLT/BASE
+EINCLUDE := HLT/BASE HLT/shuttle
 
 ###############################################################################
 #
index e809eed..7f0f667 100644 (file)
@@ -6,7 +6,6 @@ include $(MODDIR)/hlt.conf
 LIBHLTREC_VERSION := 0
 
 CLASS_HDRS:=   AliHLTReconstructor.h \
-               AliHLTPreprocessor.h \
                AliHLTOUTRawReader.h
 
 MODULE_SRCS:=  AliHLTDynamicAliLog.cxx \
diff --git a/HLT/rec/AliHLTPreprocessor.cxx b/HLT/rec/AliHLTPreprocessor.cxx
deleted file mode 100644 (file)
index 5fdc08f..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-// $Id$
-
-/**************************************************************************
- * This file is property of and copyright by the ALICE HLT Project        * 
- * ALICE Experiment at CERN, All rights reserved.                         *
- *                                                                        *
- * Primary Authors: Sebastian Bablok <Sebastian.Bablok@ift.uib.no>        *
- *                  Kenneth Aamodt                                        *
- *                  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   AliHLTPreprocessor.cxx
- * @author Kenneth Aamodt, Sebastian Bablok
- * @date   2007-12-06
- * @brief  Implementation of the HLT preprocessor (used by the Offline Shuttle) 
- */
-
-// see header file for class documentation
-// or
-// refer to README to build package
-// or
-// visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
-
-#include "AliHLTPreprocessor.h"
-
-//#include <AliCDBMetaData.h>
-//#include <AliCDBEntry.h>
-
-#include <AliCDBMetaData.h>
-
-
-#include <TObjString.h>
-#include <TString.h>
-#include <TList.h>
-#include <TFile.h>
-
-
-ClassImp(AliHLTPreprocessor)
-
-AliHLTPreprocessor::AliHLTPreprocessor(AliShuttleInterface* shuttle) 
-  :
-  AliPreprocessor(fgkHLTPreproc, shuttle),
-  fRun(0),
-  fStartTime(0),
-  fEndTime(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
-}
-
-const Int_t AliHLTPreprocessor::fgkHuffmanTablesNum = 6;
-
-const char* AliHLTPreprocessor::fgkHLTPreproc = "HLT";
-
-const char* AliHLTPreprocessor::fgkHuffmanFileBase = "huffmanData_";
-
-const char* AliHLTPreprocessor::fgkHuffmanFileDetector = "TPC_";       // at the moment only one
-
-const char* AliHLTPreprocessor::fgkTempHistoFileName = "HLTTemperatureHistograms.root";
-
-AliHLTPreprocessor::~AliHLTPreprocessor() {
-// see header file for function documentation
-}
-
-void AliHLTPreprocessor::Initialize(Int_t run, UInt_t startTime, 
-                       UInt_t endTime) {
-// see header file for function documentation
-       fRun = run;
-       fStartTime = startTime;
-       fEndTime = endTime;
-
-       TString msg("Preprocessor for HLT initialized for run: ");
-       msg += run;
-//     Log(msg.Data());
-}
-
-
-UInt_t AliHLTPreprocessor::Process(TMap* dcsAliasMap) {
-// see header file for function documentation
-       UInt_t retVal = 0;
-//     const char* localFileName = 0;
-
-       if (!GetHLTStatus()) {
-               return 0;
-       }
-
-       // get Huffman tables
-       for (Int_t i = 0; i < fgkHuffmanTablesNum; i++) {
-               TString runNumberString;
-               runNumberString.Form("%08d", fRun);
-               TString filename(fgkHuffmanFileBase);
-               filename += fgkHuffmanFileDetector;
-               filename += runNumberString;
-               filename += "_0x23000";
-               filename += i;
-               filename += "0";
-               filename += i;
-               filename += ".root";
-
-               //spec 0x23000Y0Y -> huffmanData_<detector>_<runnumber>_<specification>.root
-               TList* HLTlist = GetFileSources(kHLT, filename.Data()); 
-               if (!HLTlist) {
-                       Log("Missing list for the HLT");
-                   continue;
-               }
-
-               if (HLTlist->GetSize() != 1) {
-                       Log(Form("Problem on the size of the list: %d (HLT)", 
-                                               HLTlist->GetSize()));
-                       continue;
-               }
-
-               TObjString* location = (TObjString*) HLTlist->At(0);
-               if (location == 0) {
-                       Log("Error in location HLT list.");
-                       continue;
-               }
-               TString localFileName = GetFile(kHLT, filename.Data(), 
-                                       location->String().Data()); 
-               
-/*             
-               TFile localFile(localFileName);
-               
-               AliCDBMetaData meta("Jennifer Wagner");
-               TString name("huffmanData_");
-               name += kDetector;
-               name += "Patch_";
-               name += i;
-
-               if (!(Store("CalibTPC", name.Data(), (TObject*) &localFile, &meta, 0, kTRUE))) {
-*/
-               if (!(StoreReferenceFile(localFileName.Data(), filename.Data()))) {
-                       TString msg("Storing of object '");
-                       msg += filename;
-                       msg += "' to Reference Storage failed!";
-               Log(msg.Data());
-                       retVal = 1; 
-                       // I think this is then really an error and should return an error code
-               }
-       }
-       
-       // get Temp Histogram map
-       TList* HLTlist = GetFileSources(kHLT, fgkTempHistoFileName);
-       if (!HLTlist) {
-       Log("Missing list for the HLT");
-               return 0;
-       }
-
-       if (HLTlist->GetSize() != 1) {
-               Log(Form("Problem on the size of the list: %d (HLT)", HLTlist->GetSize()));
-               return 0;
-       }
-
-       TObjString* location = (TObjString*) HLTlist->At(0);
-       if (location == 0) {
-               Log("Error in location HLT list.");
-               return 0;
-       }
-       TString localFileName = GetFile(kHLT, fgkTempHistoFileName, 
-                               location->String().Data());
-/*
-       TFile localFile(localFileName);
-       AliCDBMetaData meta("Sebastian Bablok");
-
-       if (!(Store("Calib", kTempHistoFileName, (TObject*) &localFile, &meta, 0, kTRUE))) {
-*/
-       if (!(StoreReferenceFile(localFileName.Data(), fgkTempHistoFileName))) {
-               TString msg("Storing of object '");
-               msg += fgkTempHistoFileName;
-               msg += "' to Reference Storage failed!";
-               Log(msg.Data());
-               retVal = 1;
-               // I think this is then really an error and should return an error code
-       }
-
-       return retVal;
-}
-
-
-Bool_t AliHLTPreprocessor::ProcessDCS() {
-// see header file for function documentation
-    return kFALSE;
-}
-
diff --git a/HLT/rec/AliHLTPreprocessor.h b/HLT/rec/AliHLTPreprocessor.h
deleted file mode 100644 (file)
index 6dd3ac6..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-//-*- Mode: C++ -*-
-// @(#) $Id$
-
-#ifndef ALI_HLT_PREPROCESSOR_H
-#define ALI_HLT_PREPROCESSOR_H
-/* This file is property of and copyright by the ALICE HLT Project        * 
- * ALICE Experiment at CERN, All rights reserved.                         *
- * See cxx source for full Copyright notice                               */
-
-/**
- * @file   AliHLTPreprocessor.h
- * @author Kenneth Aamodt, Sebastian Bablok
- * @date   2007-12-06
- * @brief  Declaration of the HLT preprocessor (used by the Offline Shuttle) 
- */
-
-// see below for class documentation
-// or
-// refer to README to build package
-// or
-// visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
-
-#include "AliPreprocessor.h"
-
-/**
- * @class AliHLTPreprocessor
- * Implementation of the HLT version for the Shuttle Preprocessor. 
- *
- * @author Sebastian Bablok, Kenneth Aamodt
- *
- * @date 2007-12-05
- */
-class AliHLTPreprocessor : public AliPreprocessor {
-    public:
-       
-               /**
-                * Constructor for AliHLTPreprocessor
-                *
-                * @param shuttle pointer to the hosting shuttle
-                */
-               AliHLTPreprocessor(AliShuttleInterface* shuttle);
-
-               /**
-                * Destructor for AliHLTPreprocessor
-                */
-               virtual ~AliHLTPreprocessor();
-               
-               /**
-                * Function to initilaize the Preprocessor.
-                *
-                * @param run run number
-                * @param startTime start time of data
-                * @param endTime end time of data
-                */
-               virtual void Initialize(Int_t run, UInt_t startTime, UInt_t endTime);
-
-               /**
-                * Function to process data. Inside the preparation and storing to OCDB
-                * should be handled.
-                *
-                * @param dcsAliasMap the map containing aliases and corresponding DCS
-                *                      values and timestamps
-                *
-                * @return 0 on success; a value greater than 0 refers to an error
-                */
-               virtual UInt_t Process(TMap* dcsAliasMap);
-
-               /**
-                * Indicates if DCS data can be processed.
-                *
-                * @return true if DCS data can be processed, else false. 
-                */
-               virtual Bool_t ProcessDCS();
-
-               /** Define for HuffmanTable number */
-               static const Int_t fgkHuffmanTablesNum;                 // see above
-
-               /** Define for HuffmanFileBase */
-               static const char* fgkHuffmanFileBase;                  // see above
-
-               /** Define for Detector used for Huffman table */
-               static const char* fgkHuffmanFileDetector;              // see above
-
-               /** Define for Temperature Histogram filename */
-               static const char* fgkTempHistoFileName;                // see above
-
-               /** Define for name of the HLT Preproc */
-               static const char* fgkHLTPreproc;                               // see above
-               
-       protected:
-
-       private:
-               /**
-                * Disabled Copy constructor 
-                * (parent class is disabled so derived class does the same)
-                *
-                * @param preproc would be the AliHLTPreproc object to make copy of
-                */
-               AliHLTPreprocessor(const AliHLTPreprocessor& preproc);
-
-               /**
-                * Disabled Assignment operator
-                * (parent class is disabled so derived class does the same)
-                *
-                * @param rhs the AliHLTPreproc to assign from
-                *
-                * @return reference to assinged AliHLTPreproc
-                */
-               AliHLTPreprocessor& operator=(const AliHLTPreprocessor& rhs);
-
-               /**
-                * Stores the run number
-                */
-               Int_t fRun;                                                                             // see above
-       
-               /**
-                * Stores the start time 
-                */     
-               UInt_t fStartTime;                                                              // see above
-       
-               /**
-                * Stores the end time 
-                */     
-               UInt_t fEndTime;                                                                // see above
-
-               
-               ClassDef(AliHLTPreprocessor, 2);
-       
-};
-
-
-#endif
-
-
diff --git a/HLT/shuttle/AliHLTModulePreprocessor.cxx b/HLT/shuttle/AliHLTModulePreprocessor.cxx
new file mode 100644 (file)
index 0000000..ed48c6b
--- /dev/null
@@ -0,0 +1,180 @@
+// $Id: AliHLTModulePreprocessor.cxx 23039 2007-12-13 20:53:02Z richterm $
+
+//**************************************************************************
+//* 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 <cassert>
+#include "AliHLTModulePreprocessor.h"
+#include "AliHLTPreprocessor.h"
+
+ClassImp(AliHLTModulePreprocessor)
+
+AliHLTModulePreprocessor::AliHLTModulePreprocessor() 
+  :
+  fpContainer(NULL)
+{
+  // 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
+}
+
+void AliHLTModulePreprocessor::SetContainer(AliHLTPreprocessor* pContainer)
+{
+  assert(fpContainer==NULL || fpContainer==pContainer || pContainer==NULL);
+  fpContainer=pContainer;
+}
+
+Int_t AliHLTModulePreprocessor::GetRun()
+{
+  // see header file for function documentation
+
+  assert(fpContainer);
+  if (!fpContainer) return 0;
+  return fpContainer->GetRun();
+}
+
+UInt_t AliHLTModulePreprocessor::GetStartTime()
+{
+  // see header file for function documentation
+
+  assert(fpContainer);
+  if (!fpContainer) return 0;
+  return fpContainer->GetStartTime();
+}
+
+UInt_t AliHLTModulePreprocessor::GetEndTime()
+{
+  // see header file for function documentation
+
+  assert(fpContainer);
+  if (!fpContainer) return 0;
+  return fpContainer->GetEndTime();
+}
+
+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(fpContainer);
+  if (!fpContainer) return 0;
+  return fpContainer->Store(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(fpContainer);
+  if (!fpContainer) return 0;
+  return fpContainer->StoreReferenceData(pathLevel2, pathLevel3, object, metaData);
+}
+
+Bool_t AliHLTModulePreprocessor::StoreReferenceFile(const char* localFile, const char* gridFileName)
+{
+  // see header file for function documentation
+
+  assert(fpContainer);
+  if (!fpContainer) return 0;
+  return fpContainer->StoreReferenceFile(localFile, gridFileName);
+}
+
+Bool_t AliHLTModulePreprocessor::StoreRunMetadataFile(const char* localFile, const char* gridFileName)
+{
+  // see header file for function documentation
+
+  assert(fpContainer);
+  if (!fpContainer) return 0;
+  return fpContainer->StoreRunMetadataFile(localFile, gridFileName);
+}
+    
+const char* AliHLTModulePreprocessor::GetFile(Int_t system, const char* id, const char* source)
+{
+  // see header file for function documentation
+
+  assert(fpContainer);
+  if (!fpContainer) return 0;
+  return fpContainer->GetFile(system, id, source);
+}
+
+TList* AliHLTModulePreprocessor::GetFileSources(Int_t system, const char* id)
+{
+  // see header file for function documentation
+
+  assert(fpContainer);
+  if (!fpContainer) return 0;
+  return fpContainer->GetFileSources(system, id);
+}
+
+TList* AliHLTModulePreprocessor::GetFileIDs(Int_t system, const char* source)
+{
+  // see header file for function documentation
+
+  assert(fpContainer);
+  if (!fpContainer) return 0;
+  return fpContainer->GetFileIDs(system, source);
+}
+
+const char* AliHLTModulePreprocessor::GetRunParameter(const char* param)
+{
+  // see header file for function documentation
+
+  assert(fpContainer);
+  if (!fpContainer) return 0;
+  return fpContainer->GetRunParameter(param);
+}
+
+AliCDBEntry* AliHLTModulePreprocessor::GetFromOCDB(const char* pathLevel2, const char* pathLevel3)
+{
+  // see header file for function documentation
+
+  assert(fpContainer);
+  if (!fpContainer) return 0;
+  return fpContainer->GetFromOCDB(pathLevel2, pathLevel3);
+}
+
+const char* AliHLTModulePreprocessor::GetRunType()
+{
+  // see header file for function documentation
+
+  assert(fpContainer);
+  if (!fpContainer) return 0;
+  return fpContainer->GetRunType();
+}
+
+void AliHLTModulePreprocessor::Log(const char* message)
+{
+  // see header file for function documentation
+
+  assert(fpContainer);
+  if (!fpContainer) return;
+  fpContainer->Log(message);
+}
diff --git a/HLT/shuttle/AliHLTModulePreprocessor.h b/HLT/shuttle/AliHLTModulePreprocessor.h
new file mode 100644 (file)
index 0000000..9a95716
--- /dev/null
@@ -0,0 +1,123 @@
+//-*- Mode: C++ -*-
+// @(#) $Id: AliHLTModulePreprocessor.h 23318 2008-01-14 12:43:28Z hristov $
+
+#ifndef ALIHLTMODULEPREPROCESSOR_H
+#define ALIHLTMODULEPREPROCESSOR_H
+//* This file is property of and copyright by the ALICE HLT Project        * 
+//* ALICE Experiment at CERN, All rights reserved.                         *
+//* See cxx source for full Copyright notice                               *
+
+/**
+ * @file   AliHLTModulePreprocessor.h
+ * @author Matthias Richter
+ * @date   2008-01-22
+ * @brief  Base class for HLT module preprocessors
+ */
+
+// see below for class documentation
+// or
+// refer to README to build package
+// or
+// visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
+
+#include "TObject.h"
+
+class AliHLTPreprocessor;
+class TMap;
+class AliCDBMetaData;
+class AliCDBEntry;
+
+/**
+ * @class AliHLTModulePreprocessor
+ * Implementation of the HLT version for the Shuttle Preprocessor.
+ * This class implements the same interface as the AliPreprocessor and
+ * allows multiple preprocessors for the HLT. All methods are redirected
+ * to the AliHLTPreprocessor, which acts as the HLT preprocessor
+ * to the outside, and a container for all module preprocessors to the
+ * inside.
+ *
+ * @author Matthias Richter
+ */
+class AliHLTModulePreprocessor : public TObject
+{
+public:
+  /** Constructor*/
+  AliHLTModulePreprocessor();
+  /** Destructor */
+  virtual ~AliHLTModulePreprocessor();
+
+  /**
+   * Set the container class which is the gateway to the shuttle.
+   */
+  void SetContainer(AliHLTPreprocessor* pContainer);
+
+  /**
+   * Initialize the Preprocessor.
+   *
+   * @param run run number
+   * @param startTime start time of data
+   * @param endTime end time of data
+   */
+  virtual void Initialize(Int_t run, UInt_t startTime, UInt_t endTime) = 0;
+
+  /**
+   * Function to process data. Inside the preparation and storing to OCDB
+   * should be handled.
+   *
+   * @param dcsAliasMap the map containing aliases and corresponding DCS
+   *                   values and timestamps
+   *
+   * @return 0 on success; error code otherwise
+   */
+  virtual UInt_t Process(TMap* dcsAliasMap) = 0;
+
+  /** Get the run no */
+  Int_t GetRun();
+
+  /** Get the start time */
+  UInt_t GetStartTime();
+
+  /** Get the end time */
+  UInt_t GetEndTime();
+
+protected:
+  // the AliPreprocessor interface, all functions redirected via the
+  // AliHLTPreprocessor
+  Bool_t Store(const char* pathLevel2, const char* pathLevel3, TObject* object,
+              AliCDBMetaData* metaData, Int_t validityStart = 0, Bool_t validityInfinite = kFALSE);
+  Bool_t StoreReferenceData(const char* pathLevel2, const char* pathLevel3, TObject* object,
+                           AliCDBMetaData* metaData);
+  Bool_t StoreReferenceFile(const char* localFile, const char* gridFileName);
+
+  Bool_t StoreRunMetadataFile(const char* localFile, const char* gridFileName);
+
+  const char* GetFile(Int_t system, const char* id, const char* source);
+
+  TList* GetFileSources(Int_t system, const char* id = 0);
+
+  TList* GetFileIDs(Int_t system, const char* source);
+
+  const char* GetRunParameter(const char* param);
+
+  AliCDBEntry* GetFromOCDB(const char* pathLevel2, const char* pathLevel3);
+
+  const char* GetRunType();
+
+  void Log(const char* message);
+
+private:
+  /** copy constructor prohibited */
+  AliHLTModulePreprocessor(const AliHLTModulePreprocessor& preproc);
+  /** assignment operator prohibited */
+  AliHLTModulePreprocessor& operator=(const AliHLTModulePreprocessor& rhs);
+
+  /** the contaner class which is the gateway to the shuttle */
+  AliHLTPreprocessor* fpContainer;                        //! transient
+
+  ClassDef(AliHLTModulePreprocessor, 0);
+};
+
+
+#endif
+
+
diff --git a/HLT/shuttle/AliHLTPreprocessor.cxx b/HLT/shuttle/AliHLTPreprocessor.cxx
new file mode 100644 (file)
index 0000000..51e24f3
--- /dev/null
@@ -0,0 +1,139 @@
+// $Id: AliHLTPreprocessor.cxx 23039 2007-12-13 20:53:02Z richterm $
+
+//**************************************************************************
+//* 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   AliHLTPreprocessor.cxx
+ * @author Matthias Richter
+ * @date   2008-01-22
+ * @brief  Container for HLT module preprocessors, acts to the outside as
+ *         HLT preprocessor used by the Offline Shuttle 
+ */
+
+#include "AliHLTPreprocessor.h"
+#include "AliHLTModulePreprocessor.h"
+#include "AliHLTSystem.h"
+#include "AliHLTModuleAgent.h"
+#include "TSystem.h"
+
+ClassImp(AliHLTPreprocessor)
+
+AliHLTPreprocessor::AliHLTPreprocessor(AliShuttleInterface* shuttle) 
+  :
+  AliPreprocessor(fgkHLTPreproc, shuttle),
+  fProcessors()
+{
+  // see header file for class documentation
+  // or
+  // refer to README to build package
+  // or
+  // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
+
+  fProcessors.SetOwner();
+}
+
+const char* AliHLTPreprocessor::fgkHLTPreproc = "HLT";
+
+/** HLT default component libraries */
+const char* AliHLTPreprocessor::fgkHLTDefaultShuttleLibs[]= {
+  "libAliHLTUtil.so", 
+  "libAliHLTTPC.so", 
+  "libAliHLTComp.so", 
+  "libAliHLTSample.so",
+  //"libAliHLTPHOS.so",
+  //"libAliHLTMUON.so",
+  "libAliHLTTRD.so",
+  NULL
+};
+
+AliHLTPreprocessor::~AliHLTPreprocessor()
+{
+  // see header file for function documentation
+}
+
+void AliHLTPreprocessor::Initialize(Int_t run, UInt_t startTime, 
+                       UInt_t endTime) 
+{
+  // see header file for function documentation
+  fRun = run;
+  fStartTime = startTime;
+  fEndTime = endTime;
+
+//   TString msg("Preprocessor for HLT initialized for run: ");
+//   msg += run;
+//   Log(msg.Data());
+
+  // load component libraries
+  TString libs;
+  const char** deflib=fgkHLTDefaultShuttleLibs;
+  while (*deflib) {
+    if (gSystem->Load(*deflib)==0) {
+      Log(Form("HLT component library %s loaded", *deflib));
+    }
+  }
+
+  AliHLTModuleAgent* pAgent=AliHLTModuleAgent::GetFirstAgent();
+  while (pAgent) {
+    AliHLTModulePreprocessor* pProc=pAgent->GetPreprocessor();
+    if (pProc) {
+      pProc->SetContainer(this);
+      pProc->Initialize(run, startTime, endTime);
+      fProcessors.Add(pProc);
+      TString msg;
+      msg.Form("added preprocessor %p for module %p", pProc, pAgent);
+      Log(msg.Data());
+    }
+  }
+}
+
+UInt_t AliHLTPreprocessor::Process(TMap* dcsAliasMap)
+{
+  // see header file for function documentation
+  UInt_t retVal = 0;
+
+  if (!GetHLTStatus()) {
+    return 0;
+  }
+
+  bool bAllFailed=true;
+  TObjLink *lnk = NULL;
+  lnk=fProcessors.FirstLink();
+  while (lnk) {
+    AliHLTModulePreprocessor* pProc=dynamic_cast<AliHLTModulePreprocessor*>(lnk->GetObject());
+    if (pProc) {
+      UInt_t result=pProc->Process(dcsAliasMap);
+      if (result) {
+       TString msg;
+       msg.Form("preprocessor for module %s failed with error code %d", pProc->GetName(), result);
+       Log(msg.Data());
+      } else {
+       bAllFailed=false;
+      }
+    }
+    lnk = lnk->Next();
+  }
+
+  if (bAllFailed) return 1;
+  return retVal;
+}
+
+
+Bool_t AliHLTPreprocessor::ProcessDCS()
+{
+  // see header file for function documentation
+  return kFALSE;
+}
diff --git a/HLT/shuttle/AliHLTPreprocessor.h b/HLT/shuttle/AliHLTPreprocessor.h
new file mode 100644 (file)
index 0000000..c25bf49
--- /dev/null
@@ -0,0 +1,154 @@
+//-*- Mode: C++ -*-
+// @(#) $Id: AliHLTPreprocessor.h 23318 2008-01-14 12:43:28Z hristov $
+
+#ifndef ALIHLTPREPROCESSOR_H
+#define ALIHLTPREPROCESSOR_H
+//* This file is property of and copyright by the ALICE HLT Project        * 
+//* ALICE Experiment at CERN, All rights reserved.                         *
+//* See cxx source for full Copyright notice                               *
+
+/**
+ * @file   AliHLTPreprocessor.h
+ * @author Matthias Richter
+ * @date   2008-01-22
+ * @brief  Container for HLT module preprocessors, acts to the outside as
+ *         HLT preprocessor used by the Offline Shuttle 
+ */
+
+#include "TList.h"
+#include "AliPreprocessor.h"
+
+/**
+ * @class AliHLTPreprocessor
+ * Implementation of the HLT version for the Shuttle Preprocessor.
+ * Since HLT requires a more modular concept of the pre-processors, this
+ * class acts as HLT pre-processor to the outside and container class for
+ * the specific HLT module pre-processors to the inside.
+ *
+ * The base class for HLT module preprocessors is provided by the
+ * AliHLTModulePreprocessor class, which implements the same interface as
+ * the AliPreprocessor.
+ *
+ * The main purpose of the container class is to loop over all module
+ * preprocessors and to make the AliPreprocessor interface methods
+ * publicly available.
+ */
+class AliHLTPreprocessor : public AliPreprocessor
+{
+ public:
+  /**
+   * Constructor for AliHLTPreprocessor
+   *
+   * @param shuttle pointer to the hosting shuttle
+   */
+  AliHLTPreprocessor(AliShuttleInterface* shuttle);
+  /** Destructor */
+  virtual ~AliHLTPreprocessor();
+
+  /**
+   * Initialize the Preprocessor.
+   *
+   * @param run run number
+   * @param startTime start time of data
+   * @param endTime end time of data
+   */
+  virtual void Initialize(Int_t run, UInt_t startTime, UInt_t endTime);
+
+  /**
+   * Function to process data. Inside the preparation and storing to OCDB
+   * should be handled.
+   *
+   * @param dcsAliasMap the map containing aliases and corresponding DCS
+   *                   values and timestamps
+   *
+   * @return 0 on success; a value greater than 0 refers to an error
+   */
+  virtual UInt_t Process(TMap* dcsAliasMap);
+
+  /**
+   * Indicates if DCS data can be processed.
+   *
+   * @return true if DCS data can be processed, else false. 
+   */
+  virtual Bool_t ProcessDCS();
+
+  /** Define for name of the HLT Preproc */
+  static const char* fgkHLTPreproc;                    // see above
+
+  /** Get the run no which has been previously initialized */
+  Int_t GetRun() {return fRun;}
+
+  /** Get the start time no which has been previously initialized */
+  UInt_t GetStartTime() {return fStartTime;}
+
+  /** Get the end time no which has been previously initialized */
+  UInt_t GetEndTime() {return fEndTime;}
+
+
+  // AliPreprocessor methods made publicly available
+  //
+  Bool_t Store(const char* pathLevel2, const char* pathLevel3, TObject* object,
+              AliCDBMetaData* metaData, Int_t validityStart = 0, Bool_t validityInfinite = kFALSE) {
+    return AliPreprocessor::Store(pathLevel2, pathLevel3, object, metaData, validityStart, validityInfinite);
+  }
+
+  Bool_t StoreReferenceData(const char* pathLevel2, const char* pathLevel3, TObject* object,
+                           AliCDBMetaData* metaData) {
+    return AliPreprocessor::StoreReferenceData(pathLevel2, pathLevel3, object, metaData);
+  }
+
+  Bool_t StoreReferenceFile(const char* localFile, const char* gridFileName) {
+    return AliPreprocessor::StoreReferenceFile(localFile, gridFileName);
+  }
+
+  Bool_t StoreRunMetadataFile(const char* localFile, const char* gridFileName) {
+    return AliPreprocessor::StoreRunMetadataFile(localFile, gridFileName);
+  }
+    
+  const char* GetFile(Int_t system, const char* id, const char* source) {
+    return AliPreprocessor::GetFile(system, id, source);
+  }
+
+  TList* GetFileSources(Int_t system, const char* id = 0) {
+    return AliPreprocessor::GetFileSources(system, id);
+  }
+
+  TList* GetFileIDs(Int_t system, const char* source) {
+    return AliPreprocessor::GetFileIDs(system, source);
+  }
+
+  const char* GetRunParameter(const char* param) {
+    return AliPreprocessor::GetRunParameter(param);
+  }
+
+  AliCDBEntry* GetFromOCDB(const char* pathLevel2, const char* pathLevel3) {
+    return AliPreprocessor::GetFromOCDB(pathLevel2, pathLevel3);
+  }
+
+  const char* GetRunType() {
+    return AliPreprocessor::GetRunType();
+  }
+
+  void Log(const char* message) {
+    AliPreprocessor::Log(message);
+  }
+
+ protected:
+
+ private:
+  /** copy constructor prohibited */
+  AliHLTPreprocessor(const AliHLTPreprocessor& preproc);
+  /** assignment operator prohibited */
+  AliHLTPreprocessor& operator=(const AliHLTPreprocessor& rhs);
+
+  /** list of HLT module processors */
+  TList fProcessors;                                               //!transient
+
+  /** array of default libraries */
+  static const char* fgkHLTDefaultShuttleLibs[];                   //!transient
+
+  ClassDef(AliHLTPreprocessor, 0);
+};
+#endif
+
+
diff --git a/HLT/shuttle/Makefile.am b/HLT/shuttle/Makefile.am
new file mode 100644 (file)
index 0000000..60ccad1
--- /dev/null
@@ -0,0 +1,60 @@
+# $Id: Makefile.am 21852 2007-10-29 18:45:22Z richterm $
+# Makefile template for the Alice HLT shuttle
+
+MODULE                         = HLTshuttle
+
+SUBDIRS                        = 
+
+EXTRA_DIST                     = 
+
+# library definition
+lib_LTLIBRARIES                        =  libHLTshuttle.la
+
+# version info for the library
+LIBRARY_VERSION                        = "$(LIBHLTSHUTTLE_VERSION):0:0"
+
+# MODDIR is set by the AliRoot build system and denotes the topdir
+# of the module, we must set it since the package definition libHLTshuttle.pkg
+# includes another common configuration file
+MODDIR                         = $(top_srcdir)
+PKGDEF                         = $(MODDIR)/libHLTshuttle.pkg
+include $(top_srcdir)/libHLTshuttle.pkg
+
+# compiler flags
+AM_CPPFLAGS                    = -DMODULE=$(MODULE) \
+                                 $(PACKCXXFLAGS) \
+                                 $(foreach i, $(EINCLUDE),  \
+                                       $(shell echo $(i) | sed -e "/HLT\//!d" -e "s|HLT/|-I$(top_srcdir)/|")) \
+                                 $(foreach i, $(EINCLUDE),  \
+                                       $(shell echo $(i) | sed -e "/HLT\//d" -e "s|^|-I$(ALICE_ROOT)/|"))
+# library sources
+libHLTshuttle_la_SOURCES       = $(MODULE_SRCS)
+
+# library headers
+pkginclude_HEADERS             = $(MODULE_HDRS)
+
+# linker flags
+libHLTshuttle_la_LDFLAGS       = -L@ROOTLIBDIR@ \
+                                 @ROOTLIBS@ \
+                                 @ALIROOT_LDFLAGS@ \
+                                 @ALIROOT_LIBS@ \
+                                 -version-info $(LIBRARY_VERSION)
+
+# automatic generation of data and time of library build
+COMPILE_INFO                   =  HLTshuttleCompileInfo.cxx
+
+# set the file name for the generated root dictionary
+DICTCPP                                =  HLTshuttle-DICT.cxx
+nodist_libHLTshuttle_la_SOURCES        =  $(COMPILE_INFO) \
+                                  $(DICTCPP)
+
+CLEANFILES                     =  $(COMPILE_INFO)
+
+include $(top_srcdir)/make.dict
+
+$(COMPILE_INFO): $(libHLTshuttle_la_SOURCES) $(pkginclude_HEADERS) $(noinst_HEADERS) Makefile.am
+       @echo '//automatically generated compilation info' > $@
+       @echo '//!!! DO NOT EDIT THIS FILE !!!' >> $@
+       @echo '//add changes in Makefile.am' >> $@
+       @echo 'extern "C" void CompileInfo( char*& date, char*& time)' >> $@
+       @echo '{date=__DATE__; time=__TIME__; return;}' >> $@