bugfix: '-nextevent' command in configuration file for publisher inserted correctly...
[u/mrichter/AliRoot.git] / HLT / shuttle / AliHLTPreprocessor.cxx
1 // $Id: AliHLTPreprocessor.cxx 23039 2007-12-13 20:53:02Z richterm $
2
3 //**************************************************************************
4 //* This file is property of and copyright by the ALICE HLT Project        * 
5 //* ALICE Experiment at CERN, All rights reserved.                         *
6 //*                                                                        *
7 //* Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no>        *
8 //*                  for The ALICE HLT Project.                            *
9 //*                                                                        *
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 //**************************************************************************
18
19
20 // @file   AliHLTPreprocessor.cxx
21 // @author Matthias Richter
22 // @brief  Container for HLT module preprocessors, acts to the outside as
23 //         HLT preprocessor used by the Offline Shuttle 
24 // 
25
26 #include "AliHLTPreprocessor.h"
27 #include "AliHLTModulePreprocessor.h"
28 #include "AliHLTSystem.h"
29 #include "AliHLTModuleAgent.h"
30 #include "TSystem.h"
31
32 ClassImp(AliHLTPreprocessor)
33
34 AliHLTPreprocessor::AliHLTPreprocessor(AliShuttleInterface* shuttle) 
35   :
36   AliPreprocessor(fgkHLTPreproc, shuttle),
37   fProcessors(),
38   fActiveDetectors(0)
39 {
40   // see header file for class documentation
41   // or
42   // refer to README to build package
43   // or
44   // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
45
46   // run types according to 
47   // http://alice-ecs.web.cern.ch/alice-ecs/runtypes_3.16.html
48
49   // PHOS (retrieve Huffman tables)
50   AddRunType("STANDALONE");
51
52   // TPC (retrieve Huffman tables and temperature data)
53   AddRunType("PHYSICS");
54   AddRunType("COSMIC");
55   AddRunType("LASER");
56   AddRunType("PEDESTAL");
57   AddRunType("PULSER");
58
59   // TRD
60   AddRunType("PEDESTAL");
61   AddRunType("STANDALONE");
62  
63   fProcessors.SetOwner();
64
65 }
66
67 const char* AliHLTPreprocessor::fgkHLTPreproc = "HLT";
68
69 /** HLT default component libraries */
70 const char* AliHLTPreprocessor::fgkHLTDefaultShuttleLibs[]= {
71   "libAliHLTUtil.so", 
72   "libAliHLTRCU.so", 
73   "libAliHLTTPC.so", 
74   "libAliHLTComp.so", 
75   "libAliHLTSample.so",
76   //"libAliHLTPHOS.so",
77   //"libAliHLTMUON.so",
78   "libAliHLTTRD.so",
79   "libAliHLTGlobal.so",
80   "libAliHLTTrigger.so",
81   NULL
82 };
83
84 AliHLTPreprocessor::~AliHLTPreprocessor()
85 {
86   // see header file for function documentation
87 }
88
89 void AliHLTPreprocessor::Initialize(Int_t run, UInt_t startTime, 
90                         UInt_t endTime) 
91 {
92   // see header file for function documentation
93   fRun = run;
94   fStartTime = startTime;
95   fEndTime = endTime;
96
97   // TODO: read a configuration object from OCDB
98   // configure
99   // - component libraries
100
101   // retrieve list of active detectors from previous run.
102   fActiveDetectors = atoi(AliPreprocessor::GetRunParameter("detectorMask"));
103
104   //   TString msg("Preprocessor for HLT initialized for run: ");
105   //   msg += run;
106   //   Log(msg.Data());
107   
108   // load component libraries
109   TString libs;
110   const char** deflib=fgkHLTDefaultShuttleLibs;
111   while (*deflib) {
112     if (gSystem->Load(*deflib)==0) {
113       Log(Form("HLT component library %s loaded", *deflib));
114     }
115     
116     deflib++;
117   }
118
119   for (AliHLTModuleAgent* pAgent=AliHLTModuleAgent::GetFirstAgent();
120        pAgent!=NULL;
121        pAgent=AliHLTModuleAgent::GetNextAgent()) {
122     AliHLTModulePreprocessor* pProc=pAgent->GetPreprocessor();
123     if (pProc) 
124       {
125
126         // test if pProc is necessary, if not, take next one
127         if((pProc->GetModuleNumber() & fActiveDetectors) == 0)
128           {
129             TString msg;
130             msg.Form("%s not needed", pProc->GetModuleID());
131             Log(msg.Data());
132             continue;
133           }
134         
135         pProc->SetShuttleInterface(this);
136         pProc->Initialize(run, startTime, endTime);
137         fProcessors.Add(pProc);
138         TString msg;
139         msg.Form("added preprocessor %p with ID %s for module %p", pProc, pProc->GetModuleID(), pAgent);
140         Log(msg.Data());
141       }
142   }
143 }
144
145 UInt_t AliHLTPreprocessor::Process(TMap* dcsAliasMap)
146 {
147   // see header file for function documentation
148   UInt_t retVal = 0;
149
150   if (!GetHLTStatus()) {
151     return 0;
152   }
153
154   bool bAllFailed=true;
155   TObjLink *lnk = NULL;
156   lnk=fProcessors.FirstLink();
157   while (lnk) {
158     AliHLTModulePreprocessor* pProc=dynamic_cast<AliHLTModulePreprocessor*>(lnk->GetObject());
159     if (pProc) {
160       UInt_t result=pProc->Process(dcsAliasMap);
161       if (result) {
162         TString msg;
163         msg.Form("preprocessor for module %s failed with error code %d", pProc->GetName(), result);
164         Log(msg.Data());
165       } else {
166         bAllFailed=false;
167       }
168     }
169     lnk = lnk->Next();
170   }
171
172   if (bAllFailed) return 1;
173   return retVal;
174 }
175
176
177 Bool_t AliHLTPreprocessor::ProcessDCS()
178 {
179   // see header file for function documentation
180   return kFALSE;
181 }