added prediction processor framework and implementations; moved MUON preprocessors
[u/mrichter/AliRoot.git] / HLT / pendolino / HLT / AliHLTPredictionProcessorHLT.cxx
1 // $Id$
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: Gaute Ovrebekk                                        *
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 /** @file   AliHLTPredictionProcessorHLT.cxx
20     @author Gaute Ovrebekk
21     @date   
22     @brief  
23 */
24
25 #include "AliHLTPredictionProcessorHLT.h"
26
27 #include <AliCDBMetaData.h>
28 #include <AliCDBEntry.h>
29
30 // new
31 #include <TObjArray.h>
32 #include <AliDCSValue.h>
33
34 #include <TTimeStamp.h>
35 #include <TObjString.h>
36
37
38 ClassImp(AliHLTPredictionProcessorHLT)
39
40 AliHLTPredictionProcessorHLT::AliHLTPredictionProcessorHLT(
41                         const char* detector, AliHLTPendolino* pendolino) :
42                                 AliHLTPredictionProcessorInterface(detector, pendolino) {
43         // C-tor for AliHLTPredictionProcessorHLT
44         mPredict = false;
45         mRun = 0;
46         mStartTime = 0;
47         mEndTime = 0;
48         mBField = 0;
49 }
50
51
52 AliHLTPredictionProcessorHLT::~AliHLTPredictionProcessorHLT() {
53         // D-tor for AliHLTPredictionProcessorHLT
54 }
55
56
57 UInt_t AliHLTPredictionProcessorHLT::makePrediction(Bool_t doPrediction) {
58         // switch for prediction making
59         Log("Prediction switched on");
60         mPredict = doPrediction;
61         return 0;
62 }
63
64
65 void AliHLTPredictionProcessorHLT::Initialize(Int_t run, UInt_t startTime, 
66                         UInt_t endTime) {
67         // initializes AliHLTPredictionProcessorHLT
68         mRun = run;
69         mStartTime = startTime;
70         mEndTime = endTime;
71
72         TString msg("Initialized HLT PredictProc. Run: ");
73         msg += mRun;
74         msg += ", start time: ";
75         msg += mStartTime;
76         msg += ", end time: ";
77         msg += mEndTime;
78         msg += ".";     
79         Log(msg.Data());
80
81         if (mPredict) {
82                 Log("HLT PredictProc has prediction switched ON.");
83         } else {
84                 Log("Prediction is switched OFF.");
85         }
86 }
87
88
89 UInt_t AliHLTPredictionProcessorHLT::Process(TMap* dcsAliasMap) {
90         // processes the DCS value map
91   
92   if (!dcsAliasMap) return 9;
93   if (dcsAliasMap->GetEntries() == 0 ) return 9;
94
95   UInt_t retVal = 0;
96   Int_t start = 0;
97   TString path2("ConfigHLT"); // "Config" 
98   TString path3("SolenoidBz"); // "BField"
99   
100   UInt_t BFieldResult = ExtractBField(dcsAliasMap);
101
102   if (BFieldResult != 0) {
103         Log(" *** Extraction of BField failed - no entry for HCDB!!");
104         return 8;
105   }
106
107
108   //transform dcsAliasMap to ROOT object 
109   TString comment("BField");
110   AliCDBMetaData meta(this->GetName(), 0, "unknownAliRoot",comment.Data());
111   
112   if (Store(path2.Data(),path3.Data(),(TObject*) &mBField,&meta,start,kTRUE)) {
113     Log(" +++ Successfully stored object ;-)");
114   } else {
115     Log(" *** Storing of OBJECT failed!!");
116     retVal = 7;
117   }
118   
119   return retVal;
120 }
121
122 UInt_t AliHLTPredictionProcessorHLT::ExtractBField(TMap* dcsAliasMap){
123   // extracts the b-field from DCS value map
124 //  TString stringId = "dcs_magnet:Magnet/ALICESolenoid.Current"; // old name
125         TString stringId = "L3Current";
126   
127   Float_t BField = 0; 
128   Bool_t bRet = GetSensorValue(dcsAliasMap,stringId.Data(),&BField);
129
130   if(bRet){
131         // new   
132     BField = BField/60000; // If we get field, take this away and change SensorValue
133     TString dummy("-solenoidBz");
134     dummy += BField;
135     TObjString dummy2(dummy.Data());
136     mBField = dummy2;
137         
138     Log(Form("BField set to %s",mBField.String().Data()));
139     return 0; 
140   }
141   
142   return 1;
143
144 }
145
146 Bool_t AliHLTPredictionProcessorHLT::GetSensorValue(TMap* dcsAliasMap,
147                                                           const char* stringId, Float_t *value)
148 {
149         // extracts the sensor value
150   // return last value read from sensor specified by stringId
151   
152   TObjArray* valueSet;
153   TPair* pair = (TPair*)dcsAliasMap->FindObject(stringId);
154   if (pair) {
155     valueSet = (TObjArray*)pair->Value();
156     Int_t nentriesDCS = valueSet->GetEntriesFast() - 1;
157     if(nentriesDCS>=0){
158         AliDCSValue *val = (AliDCSValue *)valueSet->At(nentriesDCS);
159         //new
160         *value=val->GetFloat();
161         return kTRUE;
162     }
163   }
164   return kFALSE;
165 }
166
167 TMap* AliHLTPredictionProcessorHLT::produceTestData(TString aliasName) {
168         // produces test data for AliHLTPredictionProcessorHLT
169     TMap* resultMap = 0;
170
171     // here has to come real dummy data :-)
172     resultMap = new TMap();
173     TTimeStamp tt;
174         Float_t fval = 33.3;
175     TObjString* name = new TObjString("DummyData");
176     AliDCSValue* val = new AliDCSValue(fval, tt.GetTime());
177     TObjArray* arr = new TObjArray();
178     arr->Add(val);
179     resultMap->Add(name, arr);
180
181     return resultMap;
182 }
183
184