3 //**************************************************************************
4 //* This file is property of and copyright by the ALICE HLT Project *
5 //* ALICE Experiment at CERN, All rights reserved. *
7 //* Primary Authors: Sebastian Bablok <Sebastian.Bablok@ift.uib.no> *
8 //* for The ALICE HLT Project. *
10 //* Permission to use, copy, modify and distribute this software and its *
11 //* documentation strictly for non-commercial purposes is hereby granted *
12 //* without fee, provided that the above copyright notice appears in all *
13 //* copies and that both the copyright notice and this permission notice *
14 //* appear in the supporting documentation. The authors make no claims *
15 //* about the suitability of this software for any purpose. It is *
16 //* provided "as is" without express or implied warranty. *
17 //**************************************************************************
19 // @file AliHLTPendolino.cxx
20 // @author Sebastian Bablok
23 // @note maintained by Matthias.Richter@ift.uib.no
25 #include "AliHLTPendolino.h"
27 #include "AliHLTPredictionProcessorInterface.h"
28 #include "AliHLTPendolinoLogger.h"
29 #include "AliHLTPendolinoLoggerOStream.h"
30 #include "AliHLTLogging.h"
32 #include <AliCDBPath.h>
33 #include <AliCDBEntry.h>
34 #include <AliCDBManager.h>
35 #include <AliCDBStorage.h>
36 #include <AliPreprocessor.h>
39 #include <TObjString.h>
40 #include <TTimeStamp.h>
49 ClassImp(AliHLTPendolino)
52 /** Static string to define a local storage for the OCDB contact. */
53 const TString AliHLTPendolino::fgkLocalStorageDefine = "local://";
55 const char* AliHLTPendolino::fgkHLTInterfaceModule = "Pendolino-Core";
57 const TString AliHLTPendolino::fgkTaxiListBaseFolder = getenv("ALIHLT_T_HCDBDIR");
58 //"/opt/T-HCDB/lists/lists-taxi/";
60 const TString AliHLTPendolino::fgkTaxiListFolderName = "lists/lists-taxi/";
62 const TString AliHLTPendolino::fgkTaxiListPendolino = "Pendolino.list";
64 const Int_t AliHLTPendolino::fgkMaxLineLength = 256;
66 const Int_t AliHLTPendolino::fgkHLTPendolinoException = -10;
68 const Int_t AliHLTPendolino::fgkHLTPendolinoBadCast = -9;
70 const Int_t AliHLTPendolino::fgkHLTPendolinoNotPredictProc = -8;
72 const Int_t AliHLTPendolino::fgkHLTPendolinoModuleNotExisting = -7;
74 const Int_t AliHLTPendolino::fgkHLTPendolinoNoDCS = -6;
76 //const Int_t AliHLTPendolino::
80 AliHLTPendolino::AliHLTPendolino(Int_t run, TString HCDBbase, TString runType,
81 AliHLTPendolinoLogger* logger, UInt_t startTime, UInt_t endTime) :
82 fRunType(runType), fRunNumber(run),
83 fHCDBPath(""), fPredictionProcessorMap(),
84 fpLogger(0), fOwnLogger(kFALSE),
85 fStartTime(startTime), fEndTime(endTime)
87 // see header file for class documentation
89 // refer to README to build package
91 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
93 // C-tor of AliHLTPendolino
94 fHCDBPath = fgkLocalStorageDefine + HCDBbase;
96 fpLogger = new AliHLTPendolinoLoggerOStream();
105 AliHLTPendolino::~AliHLTPendolino() {
106 // D-tor of AliHLTPendolino
107 // clean up registered PredicitonProcs
108 TMapIter iter(&fPredictionProcessorMap, kIterForward);
109 AliHLTPredictionProcessorInterface* aPredict;
112 // get each key inside the map
113 while ((key = iter.Next())) {
114 TString detector = key->GetName();
117 // get value for the key
118 aPredict = dynamic_cast<AliHLTPredictionProcessorInterface*>
119 (fPredictionProcessorMap.GetValue(key));
122 Log(fgkHLTInterfaceModule,
123 " *** ERROR, cannot delete registered processor '"
124 + detector + "'; does not seem to be a PredictionProcessor.");
127 Log(fgkHLTInterfaceModule, " ### [DEBUG] deleting PredictProc '" +
130 } catch (std::bad_cast) {
131 // failed -> is not a AliHLTPredictionProcessorInterface implementation
132 // -> discarding call
133 Log(fgkHLTInterfaceModule, " *** ERROR, cannot delete registered processor '"
134 + detector + "'; does not seem to be a PredictionProcessor..");
137 } catch (std::exception& e) {
138 Log(fgkHLTInterfaceModule,
139 " *** Exception in call for deleting PrecitionProcessor '"
144 Log(fgkHLTInterfaceModule, " ### [DEBUG] Deleting of PredictionProcessors finished.");
147 if ((fOwnLogger) && (fpLogger != 0)) {
154 // inherited virtual functions, maybe use them from base class
155 Bool_t AliHLTPendolino::Store(const AliCDBPath& path, TObject* object,
156 AliCDBMetaData* metaData, Int_t validityStart,
157 Bool_t validityInfinite) {
158 // stores a entry in HCDB
159 Bool_t retVal = kFALSE;
160 Int_t startNumber = 0;
162 AliCDBManager* man = 0;
163 AliCDBStorage* localHCDB = 0;
165 startNumber = ((fRunNumber - validityStart) <= 0) ? 0 : (fRunNumber - validityStart);
166 endNumber = (validityInfinite) ? AliCDBRunRange::Infinity() : fRunNumber;
168 man = AliCDBManager::Instance();
170 Log(fgkHLTInterfaceModule, " *** ERROR cannot obtain a CDB Manager reference.");
174 // contact local storage (HCDB)
175 localHCDB = man->GetStorage(fHCDBPath.Data());
176 if (localHCDB == 0) {
177 TString msg(" *** ERROR in initiating HCDB: ");
179 Log(fgkHLTInterfaceModule, msg.Data());
180 man->DestroyActiveStorages();
184 // taken from AliShuttle
185 if (! dynamic_cast<TObjString*> (metaData->GetProperty("RunUsed(TObjString)"))) {
186 TObjString runUsed = Form("%d", fRunNumber);
187 metaData->SetProperty("RunUsed(TObjString)", runUsed.Clone());
191 // Version is set to current run, it will be used later to transfer data to Grid
192 // Why using current run number as version number ???
193 AliCDBId entryID(path, startNumber, endNumber, fRunNumber, -1);
195 if (localHCDB->Put(object, entryID, metaData)) {
198 TString msg(" *** Unable to store DCS data to HCDB: ");
199 msg += entryID.ToString();
200 Log(fgkHLTInterfaceModule, msg.Data());
203 man->DestroyActiveStorages();
209 Bool_t AliHLTPendolino::StoreReferenceData(const AliCDBPath& path,
210 TObject* /*object*/, AliCDBMetaData* /*metaData*/) {
211 // Disabled Function inherited from interface
212 TString msg(" ~~~ PredictProc tries to store reference data to '"
213 + path.GetPath() + "'. Discarding call in Pendolino.");
214 Log(fgkHLTInterfaceModule, msg.Data());
220 Bool_t AliHLTPendolino::StoreReferenceFile(const char* detector,
221 const char* localFile, const char* gridFileName) {
222 // Disabled Function inherited from interface
224 TString det(detector);
225 TString filename(localFile);
226 TString gridname(gridFileName);
227 msg = " ~~~ PredictProc (" + det + ") tries to store reference file (" +
228 filename + ") to '" + gridname +
229 "'. Discarding call in Pendolino.";
230 Log(fgkHLTInterfaceModule, msg.Data());
236 Bool_t AliHLTPendolino::StoreRunMetadataFile(const char* localFile,
237 const char* gridFileName) {
238 // Disabled Function inherited from interface
241 TString filename(localFile);
242 TString gridname(gridFileName);
243 msg = " ~~~ PredictProc tries to store 'run meta data' file (" +
244 filename + ") to '" + gridname + "'. Discarding call in Pendolino.";
245 Log(fgkHLTInterfaceModule, msg.Data());
251 const char* AliHLTPendolino::GetFile(Int_t system, const char* detector,
252 const char* id, const char* source) {
253 // Disabled Function inherited from interface
255 TString det(detector);
256 TString filename(id);
258 TString from(GetSystemName(system));
259 msg = " ~~~ PredictProc (" + det + ") requests file (" + filename + ") from '"
260 + src + "' at " + from + ". Discarding call in Pendolino.";
261 Log(fgkHLTInterfaceModule, msg.Data());
266 const char* AliHLTPendolino::GetTriggerConfiguration() {
267 // Disabled Function inherited from interface
269 msg = " ~~~ PredictProc tries to request Trigger configuration, this is disabled. Discarding call in Pendolino.";
270 Log(fgkHLTInterfaceModule, msg.Data());
275 const char* AliHLTPendolino::GetTriggerDetectorMask() {
276 // Disabled Function inherited from interface
278 msg = " ~~~ PredictProc tries to request Trigger configuration, this is disabled. Discarding call in Pendolino.";
279 Log(fgkHLTInterfaceModule, msg.Data());
285 TList* AliHLTPendolino::GetFileSources(Int_t system, const char* detector,
287 // Disabled Function inherited from interface
289 TString det(detector);
290 TString filename(id);
291 TString from(GetSystemName(system));
292 msg = " ~~~ PredictProc (" + det + ") requests file sources for (" + filename
293 + ") from '" + from + ". Discarding call in Pendolino.";
294 Log(fgkHLTInterfaceModule, msg.Data());
300 TList* AliHLTPendolino::GetFileIDs(Int_t system, const char* detector,
301 const char* source) {
302 // Disabled Function inherited from interface
304 TString det(detector);
305 TString filename(source);
306 TString from(GetSystemName(system));
307 msg = " ~~~ PredictProc (" + det + ") requests file IDs for (" + filename
308 + ") from '" + from + ". Discarding call in Pendolino.";
309 Log(fgkHLTInterfaceModule, msg.Data());
315 const char* AliHLTPendolino::GetRunParameter(const char* /*lbEntry*/) {
316 // getter for run parameter
319 // maybe using a parameter file, where these settings are stored at start up by
320 // the starting script and a dedicated class read and stores its content.
322 Log(fgkHLTInterfaceModule,
323 " ### GetRunParameter are not defined, yet. Feature will be available soon.");
328 Bool_t AliHLTPendolino::GetHLTStatus() {
329 // getter for HLT status
330 // since this is the Pendolino -> always true
335 AliCDBEntry* AliHLTPendolino::GetFromOCDB(const char* detector,
336 const AliCDBPath& path) {
337 // fetches entry from HCDB
338 AliCDBManager *man = AliCDBManager::Instance();
341 TString msg(" *** ERROR, cannot obtain a CDB Manager reference for: ");
343 Log(fgkHLTInterfaceModule, msg.Data());
347 AliCDBStorage *hcdb = man->GetStorage(fHCDBPath.Data());
349 TString msg(" *** ERROR, cannot acquire HCDB storage (");
350 msg += fHCDBPath + ") for fetching data for Pendolino.";
351 Log(fgkHLTInterfaceModule, msg.Data());
355 if (hcdb->GetLatestVersion(path.GetPath(), fRunNumber)<0) {
359 return hcdb->Get(path, fRunNumber);
363 AliCDBEntry* entry = 0;
365 entry = dynamic_cast<AliCDBEntry*> (hcdb->Get(path, fRunNumber));
366 } catch (std::bad_cast) {
367 TString msg(" *** ERROR, bad cast of HCDB entry (");
368 msg += path.GetPath() + ") after fetching from HCDB.";
369 Log(fgkHLTInterfaceModule, msg.Data());
378 Bool_t AliHLTPendolino::IncludeAliCDBEntryInList(const TString& entryPath) {
379 // includes entry in Taxi list (objects to be fetched from OCDB)
380 Bool_t bRet = kFALSE;
386 filename = fgkTaxiListBaseFolder + "/" + fgkTaxiListFolderName +
387 fgkTaxiListPendolino;
388 Log(fgkHLTInterfaceModule, filename + " [DEBUG] filename");
390 infile.open(filename, ios_base::in);
391 if (infile.is_open()) {
392 char line[fgkMaxLineLength];
394 while (!infile.eof()) {
395 infile.getline(line, fgkMaxLineLength);
396 if (strncmp(line, entryPath.Data(), entryPath.Length()) == 0) {
397 // entry already exists, leave function after proper clean up
398 TString msg(" --- Entry '");
399 msg += entryPath + "' is already included in Taxi list file.";
400 Log(fgkHLTInterfaceModule, msg.Data());
407 // include entry to list
408 outfile.open(filename, ios_base::out | ios_base::app);
409 if (!outfile.is_open()) {
410 TString msg(" *** Unable to create Pendolino list file '");
411 msg += filename + "' for Taxi. Continueing without list update...";
412 Log(fgkHLTInterfaceModule, msg.Data());
415 // outfile.seekp(-1, ios::end);
417 outfile << "#HLT (Pendolino) - Run: " << fRunNumber << ", Time: " <<
418 ts.AsString() << endl;
419 outfile << entryPath.Data() << endl;
422 TString msg(" +++ Included missing entry '");
423 msg += entryPath + "' in Taxi list file.";
424 Log(fgkHLTInterfaceModule, msg.Data());
428 TString msg(" ~~~ Unable to open Pendolino list file '");
429 msg += filename + "' for Taxi. Creating new one.";
430 Log(fgkHLTInterfaceModule, msg.Data());
431 outfile.open(filename, ios_base::out);
433 if (outfile.is_open()) {
434 outfile << "# Automatic generated Taxi list." << endl;
435 outfile << "# It contains the OCDB entries required by the Pendolino."
436 << endl << "#" << endl;
437 outfile << "# !!! DON'T EDIT THIS FILE (if you don't know what you are doing) !!!"
439 outfile << "#HLT (Pendolino) - Run: " << fRunNumber << ", Time: " <<
440 ts.AsString() << endl;
441 outfile << entryPath.Data() << endl;
446 msg=" *** Unable to create Pendolino list file '";
447 msg += filename + "' for Taxi. Continueing without list update...";
448 Log(fgkHLTInterfaceModule, msg.Data());
456 void AliHLTPendolino::Log(const char* detector, const char* message) {
458 if (fpLogger) fpLogger->log(detector, message);
459 // refer data to a Pendolino Logger, which can take care of it
463 void AliHLTPendolino::RegisterPreprocessor(AliPreprocessor* preprocessor) {
464 // registers a PredictionProcessor
465 if (preprocessor == 0) {
466 Log(fgkHLTInterfaceModule,
467 " *** ERROR: Cannot register NULL pointer as PredictionProcessor.");
471 TString detector(preprocessor->GetName());
473 if (fPredictionProcessorMap.GetValue(detector.Data())) {
474 Log(fgkHLTInterfaceModule, " ~~~ Already registered PredictionProcessor '" +
475 detector + "'. Ignoring call.");
478 // store as AliPreprocessor* and make cast to AliHLTPredictionProcessorInterface*
479 // later, when accesing them.
480 fPredictionProcessorMap.Add(new TObjString(detector), preprocessor);
483 TString detector(preprocessor->GetName());
484 AliHLTPredictionProcessorInterface* predictProc = 0;
485 // UInt_t retVal = 0;
487 // TODO move this in seperated call outside RegisterPreprocessor(..)
488 // safety reason, since preprocessor is not completely generated yet
489 if (!preprocessor->ProcessDCS()) {
490 Log(fgkHLTInterfaceModule, " *** PredictionProcessor '" + detector +
491 "' not registered, because it will not process DCS values.");
494 Log(fgkHLTInterfaceModule, "Module Processes DCS values, Registering PredictionProc "
497 // don't use this check, if there are several PreProcs from one detector
498 // they will have all have different names
499 //if (GetDetPos(detector.Data()) < 0) {
500 // Log(fgkHLTInterfaceModule, " *** Invalid detector name: " + detector);
503 // Check if preprocessor is actually PredictionProcessor
506 predictProc = reinterpret_cast<AliHLTPredictionProcessorInterface*>
508 // Don't use dynamic_cast or C-style cast, they only rename the pointer/object,
509 // but don't import the extended members -> use reinterpret_cast. Maybe perform
510 // dynamic_cast check in other function, which is not called inside a C-tor
511 // of AliHLTPredictionProcessorInterface.
513 // ATTENTION: Don't call any functions of AliHLTPredictionProcessorInterface here
514 // the object has not been completely generated yet, only AliPreprocessor part
515 // is available. Call of these function should be performed in seperate call outside
516 // RegisterPreprocessor(..).)
518 } catch (std::bad_cast) {
519 // failed -> is not a AliHLTPredictionProcessorInterface implementation
520 // -> discarding call
521 Log(fgkHLTInterfaceModule, " *** Cannot register PredictionProcessor '" + detector +
522 "'. Does not implement the AliHLTPredictionProcessorInterface.");
524 } catch (std::exception& e) {
525 Log(fgkHLTInterfaceModule, " *** Exception in the registering of the PredictProc.");
528 if (fPredictionProcessorMap.GetValue(detector.Data())) {
529 Log(fgkHLTInterfaceModule, " ~~~ Already registered PredictionProcessor '" +
530 detector + "'. Ignoring call.");
534 fPredictionProcessorMap.Add(new TObjString(detector), predictProc);
539 UInt_t AliHLTPendolino::SetToPredictMaking() {
540 // switches prdiction making on in all registered PredictioProcessors
543 // get an iterator for the map
544 TMapIter iter(&fPredictionProcessorMap, kIterForward);
545 AliHLTPredictionProcessorInterface* aPredict;
548 // get each key inside the map
549 while ((key = iter.Next())) {
550 TString detector = key->GetName();
553 // get value for the key
554 aPredict = dynamic_cast<AliHLTPredictionProcessorInterface*>
555 (fPredictionProcessorMap.GetValue(key));
558 Log(fgkHLTInterfaceModule, " *** Cannot use PredictionProcessor '"
560 "'. Does not implement the AliHLTPredictionProcessorInterface.");
563 // detector = aPredict->GetName();
565 if ((aPredict->ProcessDCS()) && (aPredict->makePrediction() == 0)) {
568 Log(fgkHLTInterfaceModule, " *** PredictionProcessor '" + detector
569 + "' does not allow DCS processing or failed to init prediction making.");
571 } catch (std::bad_cast) {
572 // failed -> is not a AliHLTPredictionProcessorInterface implementation
573 // -> discarding call
574 Log(fgkHLTInterfaceModule, " *** Cannot use PredictionProcessor '"
576 "'. Does not implement the AliHLTPredictionProcessorInterface.");
579 } catch (std::exception& e) {
580 Log(fgkHLTInterfaceModule, " *** Exception in call for makePrediction of "
589 Int_t AliHLTPendolino::setToPredictMaking(TString detector) {
590 // switches prediction making on in chosen PreditionProcessor
592 AliHLTPredictionProcessorInterface* aPredict = 0;
595 // get the value for the key
596 TObject* object = fPredictionProcessorMap.GetValue(detector.Data());
599 Log(fgkHLTInterfaceModule, " *** No PredictionProcessor for '" +
600 detector + "' registered.");
601 return fgkHLTPendolinoModuleNotExisting;
604 aPredict = dynamic_cast<AliHLTPredictionProcessorInterface*> (object);
607 Log(fgkHLTInterfaceModule, " *** Cannot use PredictionProcessor '"
609 "'. Does not implement the AliHLTPredictionProcessorInterface.");
610 return fgkHLTPendolinoNotPredictProc;
612 // detector = aPredict->GetName();
614 if (!((aPredict->ProcessDCS()) && (aPredict->makePrediction() == 0))) {
615 Log(fgkHLTInterfaceModule, " *** PredictionProcessor '" + detector +
616 "' does not allow DCS processing or failed to init prediction making.");
617 retVal = fgkHLTPendolinoNoDCS;
620 } catch (std::bad_cast) {
621 // failed -> is not a AliHLTPredictionProcessorInterface implementation
622 // -> discarding call
623 Log(fgkHLTInterfaceModule, " *** Cannot use PredictionProcessor '"
625 "'. Does not implement the AliHLTPredictionProcessorInterface.");
626 retVal = fgkHLTPendolinoBadCast;
628 } catch (std::exception& e) {
629 Log(fgkHLTInterfaceModule, " *** Exception in call for makePrediction of "
631 retVal = fgkHLTPendolinoException;
638 Int_t AliHLTPendolino::PrepareDCSValues(TString detector, TMap* DCSValues) {
639 // function to prepare retrieved DCS values
641 AliHLTPredictionProcessorInterface* aPredict = 0;
644 // get the value for the key
645 TObject* object = fPredictionProcessorMap.GetValue(detector.Data());
648 Log(fgkHLTInterfaceModule, " *** No PredictionProcessor for '" +
649 detector + "' registered.");
650 return fgkHLTPendolinoModuleNotExisting;
653 aPredict = dynamic_cast<AliHLTPredictionProcessorInterface*> (object);
656 Log(fgkHLTInterfaceModule, " *** Cannot use PredictionProcessor '"
658 "'. Does not implement the AliHLTPredictionProcessorInterface.");
659 return fgkHLTPendolinoNotPredictProc;
662 retVal = aPredict->Process(DCSValues);
665 } catch (std::bad_cast) {
666 // failed -> is not a AliHLTPredictionProcessorInterface implementation
667 // -> discarding call
668 Log(fgkHLTInterfaceModule, " *** Cannot use PredictionProcessor '"
670 "'. Does not implement the AliHLTPredictionProcessorInterface.");
671 retVal = fgkHLTPendolinoBadCast;
673 } catch (std::exception& e) {
674 Log(fgkHLTInterfaceModule, " *** Exception in call prepareDCSValues of "
676 retVal = fgkHLTPendolinoException;
682 TMap* AliHLTPendolino::EmulateDCSMap(TString detector, TString aliasName) {
683 // function to generate test data of given PredictionProcessor
685 AliHLTPredictionProcessorInterface* aPredict = 0;
688 // get the value for the key
689 TObject* object = fPredictionProcessorMap.GetValue(detector.Data());
692 Log(fgkHLTInterfaceModule, " *** No PredictionProcessor for '" +
693 detector + "' registered.");
697 aPredict = dynamic_cast<AliHLTPredictionProcessorInterface*> (object);
700 Log(fgkHLTInterfaceModule, " *** Cannot use PredictionProcessor '"
702 "'. Does not implement the AliHLTPredictionProcessorInterface.");
706 result = aPredict->produceTestData(aliasName);
709 } catch (std::bad_cast) {
710 // failed -> is not a AliHLTPredictionProcessorInterface implementation
711 // -> discarding call
712 Log(fgkHLTInterfaceModule, " *** Cannot use PredictionProcessor '"
714 "'. Does not implement the AliHLTPredictionProcessorInterface.");
716 } catch (std::exception& e) {
717 Log(fgkHLTInterfaceModule, " *** Exception in call emulateDCSMap of "
724 Int_t AliHLTPendolino::initPredictProc(TString detector, Int_t run,
725 UInt_t startTime, UInt_t endTime) {
726 // initializes given PredictionProcessor (defined by detector name)
728 AliHLTPredictionProcessorInterface* aPredict = 0;
731 // get the value for the key
732 TObject* object = fPredictionProcessorMap.GetValue(detector.Data());
735 Log(fgkHLTInterfaceModule, " *** No PredictionProcessor for '" +
736 detector + "' registered.");
737 return fgkHLTPendolinoModuleNotExisting;
740 aPredict = dynamic_cast<AliHLTPredictionProcessorInterface*> (object);
743 Log(fgkHLTInterfaceModule, " *** Cannot use PredictionProcessor '"
745 "'. Does not implement the AliHLTPredictionProcessorInterface.");
746 return fgkHLTPendolinoNotPredictProc;
749 // Initialize Prediction Processor
750 aPredict->Initialize(run, startTime, endTime);
752 } catch (std::bad_cast) {
753 // failed -> is not a AliHLTPredictionProcessorInterface implementation
754 // -> discarding call
755 Log(fgkHLTInterfaceModule, " *** Cannot use PredictionProcessor '"
757 "'. Does not implement the AliHLTPredictionProcessorInterface.");
758 retVal = fgkHLTPendolinoBadCast;
760 } catch (std::exception& e) {
761 Log(fgkHLTInterfaceModule, " *** Exception in call prepareDCSValues of "
763 retVal = fgkHLTPendolinoException;
770 #ifdef SHUTTLE_PRE_REV29388_INTERFACE
771 const UInt_t AliHLTPendolino::GetStartTimeDCSQuery()
773 UInt_t AliHLTPendolino::GetStartTimeDCSQuery()
779 #ifdef SHUTTLE_PRE_REV29388_INTERFACE
780 const UInt_t AliHLTPendolino::GetEndTimeDCSQuery()
782 UInt_t AliHLTPendolino::GetEndTimeDCSQuery()
788 void AliHLTPendolino::Log(const char* name , const char* message, UInt_t level)
790 // overloaded function of the shuttle interface
791 // translate into HLT log message
793 AliHLTComponentLogSeverity severity=kHLTLogInfo;
795 case 1: severity=kHLTLogBenchmark; break;
796 case 2: severity=kHLTLogDebug; break;
797 case 3: severity=kHLTLogInfo; break;
798 case 4: severity=kHLTLogWarning; break;
799 default: severity=kHLTLogError;
801 log.LoggingVarargs(severity, "AliHLTPendolino", name , __FILE__ , __LINE__ , message);
804 // this global object is not for use, it just makes sure that
805 // AliHLTPendolino can be instantiated. In case of missing virtual
806 // functions a compilation error will indicate potential problems in
807 // the pendolino macros
808 AliHLTPendolino gAliHLTPendolino(0,"");