Shuttle getters and setters of main/local OCDB/Reference storages, temp and log
[u/mrichter/AliRoot.git] / SHUTTLE / TestShuttle / AliTestShuttle.cxx
index 6f2e95eb0f2275ba823a14f9b9f74babb1818d96..a9c87d0893922aee99e5860a53056d2beae3efdf 100644 (file)
 
 /*
 $Log$
+Revision 1.6  2006/11/06 14:22:47  jgrosseo
+major update (Alberto)
+o) reading of run parameters from the logbook
+o) online offline naming conversion
+o) standalone DCSclient package
+
+Revision 1.5  2006/10/02 12:58:52  jgrosseo
+Small interface change in StoreReferenceData
+
+Revision 1.4  2006/08/08 14:19:07  jgrosseo
+Update to shuttle classes (Alberto)
+
+- Possibility to set the full object's path in the Preprocessor's and
+Shuttle's  Store functions
+- Possibility to extend the object's run validity in the same classes
+("startValidity" and "validityInfinite" parameters)
+- Implementation of the StoreReferenceData function to store reference
+data in a dedicated CDB storage.
+
+Revision 1.3  2006/07/11 12:44:32  jgrosseo
+adding parameters for extended validity range of data produced by preprocessor
+
+Revision 1.2  2006/06/06 14:20:05  jgrosseo
+o) updated test preprocessor (alberto)
+o) added comments to example macro
+o) test shuttle implements new interface
+
 Revision 1.2  2006/03/07 07:52:34  hristov
 New version (B.Yordanov)
 
@@ -47,29 +74,57 @@ some docs added
 #include "AliLog.h"
 
 #include "AliCDBManager.h"
+#include "AliCDBStorage.h"
 #include "AliCDBMetaData.h"
+#include "AliCDBPath.h"
 #include "AliCDBId.h"
+#include "AliPreprocessor.h"
 
 #include <TMap.h>
 #include <TList.h>
-#include <TString.h>
 #include <TObjString.h>
+#include <TSystem.h>
 
 ClassImp(AliTestShuttle)
 
-AliTestShuttle::AliTestShuttle(TMap* inputFiles) : fInputFiles(inputFiles)
+//______________________________________________________________________________________________
+AliTestShuttle::AliTestShuttle(Int_t run, UInt_t startTime, UInt_t endTime) :
+  fRun(run),
+  fStartTime(startTime),
+  fEndTime(endTime),
+  fInputFiles(0),
+  fRunParameters(0),
+  fPreprocessors(0),
+  fDcsAliasMap(0)
 {
   // constructor
-  // inputFiles contains the map of local files that can be retrieved by the preprocessor
-  // check TestPreprocessor.C for an example of its structure
+
+  fInputFiles = new TMap;
+  fRunParameters = new TMap;
+  fPreprocessors = new TObjArray;
 }
 
+//______________________________________________________________________________________________
 AliTestShuttle::~AliTestShuttle()
 {
   // destructor
+
+  delete fInputFiles;
+  fInputFiles = 0;
+
+  delete fRunParameters;
+  fRunParameters = 0;
+
+  delete fPreprocessors;
+  fPreprocessors = 0;
+
+  delete fDcsAliasMap;
+  fDcsAliasMap = 0;
 }
 
-Int_t AliTestShuttle::Store(const char* detector, TObject* object, AliCDBMetaData* metaData)
+//______________________________________________________________________________________________
+UInt_t AliTestShuttle::Store(const AliCDBPath& path, TObject* object, AliCDBMetaData* metaData,
+                               Int_t validityStart, Bool_t validityInfinite)
 {
   // Stores the CDB object
   // This function should be called at the end of the preprocessor cycle
@@ -77,13 +132,39 @@ Int_t AliTestShuttle::Store(const char* detector, TObject* object, AliCDBMetaDat
   // This implementation just stores it on the local disk, the full AliShuttle
   // puts it to the Grid FileCatalog
 
-  AliCDBId id(Form("%s/SHUTTLE/Data", detector), 0, 0);
+  Int_t startRun = fRun - validityStart;
+  if(startRun < 0) {
+       AliError("First valid run happens to be less than 0! Setting it to 0...");
+       startRun=0;
+  }
+
+  Int_t endRun = -1;
+  if(validityInfinite) {
+       endRun = AliCDBRunRange::Infinity();
+  } else {
+       endRun = fRun;
+  }
+
+  AliCDBId id(path, startRun, endRun);
+
+  return AliCDBManager::Instance()->GetStorage(fgkMainCDB)->Put(object, id, metaData);
+}
+
+//______________________________________________________________________________________________
+UInt_t AliTestShuttle::StoreReferenceData(const AliCDBPath& path, TObject* object, AliCDBMetaData* metaData)
+{
+  // Stores the object as reference data
+  // This function should be called at the end of the preprocessor cycle
+  //
+  // This implementation just stores it on the local disk, the full AliShuttle
+  // puts it to the Grid FileCatalog
 
-  AliCDBManager::Instance()->Put(object, id, metaData);
+  AliCDBId id(path, fRun, fRun);
 
-  return -1;
+  return AliCDBManager::Instance()->GetStorage(fgkMainRefStorage)->Put(object, id, metaData);
 }
 
+//______________________________________________________________________________________________
 const char* AliTestShuttle::GetFile(Int_t system, const char* detector, const char* id, const char* source)
 {
   // This function retrieves a file from the given system (kDAQ, kDCS, kHLT) with the given file id
@@ -109,13 +190,15 @@ const char* AliTestShuttle::GetFile(Int_t system, const char* detector, const ch
   TObjString* fileName = dynamic_cast<TObjString*> (fileNamePair->Value());
   if (!fileName)
   {
-    AliError(Form("Could not find files from source %s in %s with id %s", source, fkSystemNames[system], id));
+    AliError(Form("Could not find files from source %s in %s with id %s",
+                       source, fkSystemNames[system], id));
     return 0;
   }
 
   return fileName->GetString().Data();
 }
 
+//______________________________________________________________________________________________
 TList* AliTestShuttle::GetFileSources(Int_t system, const char* detector, const char* id)
 {
   // Returns a list of sources in a given system that saved a file with the given id
@@ -150,6 +233,7 @@ TList* AliTestShuttle::GetFileSources(Int_t system, const char* detector, const
   return list;
 }
 
+//______________________________________________________________________________________________
 void AliTestShuttle::Log(const char* detector, const char* message)
 {
   // test implementation of Log
@@ -158,3 +242,81 @@ void AliTestShuttle::Log(const char* detector, const char* message)
   AliInfo(Form("%s: %s", detector, message));
 }
 
+//______________________________________________________________________________________________
+void AliTestShuttle::AddInputFile(Int_t system, const char* detector, const char* id, const char* source, const char* fileName)
+{
+  // This function adds a file to the list of input files
+
+  TString key;
+  key.Form("%s-%s-%s", fkSystemNames[system], detector, id);
+  TPair* sourceListPair = dynamic_cast<TPair*> (fInputFiles->FindObject(key.Data()));
+  TMap* sourceList = 0;
+  if (sourceListPair)
+    sourceList = dynamic_cast<TMap*> (sourceListPair->Value());
+  if (!sourceList)
+  {
+    sourceList = new TMap;
+    fInputFiles->Add(new TObjString(key), sourceList);
+  }
+
+  sourceList->Add(new TObjString(source), new TObjString(fileName));
+}
+
+//______________________________________________________________________________________________
+void AliTestShuttle::Process()
+{
+  // This function tests all preprocessors that are registered to it
+  // All preprocessors get the same dcs alias map and have access to the same list of files.
+
+  for (Int_t i=0; i<fPreprocessors->GetEntries(); ++i)
+  {
+    AliPreprocessor* preprocessor = dynamic_cast<AliPreprocessor*> (fPreprocessors->At(i));
+    if (preprocessor)
+    {
+      preprocessor->Initialize(fRun, fStartTime, fEndTime);
+      preprocessor->Process(fDcsAliasMap);
+    }
+  }
+}
+
+//______________________________________________________________________________________________
+void AliTestShuttle::RegisterPreprocessor(AliPreprocessor* preprocessor)
+{
+  // registers a preprocessor
+
+       const char* detName = preprocessor->GetName();
+       if(strcmp("DET", detName) != 0) {
+               if(GetDetPos(detName) < 0)
+                       AliFatal(Form("********** !!!!! Invalid detector name: %s !!!!! **********", detName));
+               }
+
+       fPreprocessors->Add(preprocessor);
+}
+
+//______________________________________________________________________________________________
+void AliTestShuttle::AddInputRunParameter(const char* key, const char* value){
+// set a run parameter (in reality it will be read from the DAQ logbook)
+
+       TObjString* keyObj = new TObjString(key);
+       if (fRunParameters->Contains(key)) {
+               AliWarning(Form("Parameter %s already existing and it will be replaced.", key));
+               delete fRunParameters->Remove(keyObj);
+
+       }
+       fRunParameters->Add(keyObj, new TObjString(value));
+       AliDebug(2, Form("Number of parameters: %d", fRunParameters->
+       GetEntries()));
+}
+
+//______________________________________________________________________________________________
+const char* AliTestShuttle::GetRunParameter(const char* key){
+// get a run parameter
+
+       TObjString* value = dynamic_cast<TObjString*> (fRunParameters->GetValue(key));
+       if(!value) {
+               AliError(Form("No such parameter: %s", key));
+               return 0;
+       }
+       return value->GetName();
+}
+