added prediction processor framework and implementations; moved MUON preprocessors
[u/mrichter/AliRoot.git] / HLT / pendolino / HLT / AliHLTPredicProcTempMonitor.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: Sebastian Bablok <Sebastian.Bablok@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 /** @file   AliHLTPredicProcTempMonitor.cxx
20     @author Sebastian Bablok
21     @date   
22     @brief  
23 */
24
25 #include "AliHLTPredicProcTempMonitor.h"
26
27 #include <AliCDBMetaData.h>
28 #include <AliCDBEntry.h>
29 #include <AliDCSValue.h>
30
31 #include <TMap.h>
32 #include <TObjString.h>
33 #include <TObjArray.h>
34
35 #include <TTimeStamp.h>
36
37
38 ClassImp(AliHLTPredicProcTempMonitor)
39
40
41 const TString AliHLTPredicProcTempMonitor::kPath2("CalibMonitor");
42
43 const TString AliHLTPredicProcTempMonitor::kPath3("DCSTempMon");
44
45 const TString AliHLTPredicProcTempMonitor::kCreator("S. Bablok (HLT)");
46
47 const TString AliHLTPredicProcTempMonitor::kComment("Calib Object for monitoring DCS temperature values in HLT.");
48
49 const TString AliHLTPredicProcTempMonitor::kAliRootVersion("");
50
51 const UInt_t AliHLTPredicProcTempMonitor::kUnableToStoreObject = 7;
52
53 //const TString AliHLTPredicProcTempMonitor::kAmandaTempSensor = "TPC_PT_%d_TEMPERATURE";
54
55                 
56 AliHLTPredicProcTempMonitor::AliHLTPredicProcTempMonitor(
57                         const char* detector, AliHLTPendolino* pendolino) :
58                                 AliHLTPredictionProcessorInterface(detector, pendolino) {
59         // C-tor for AliHLTPredicProcTempMonitor
60         mPredict = true;
61         mRun = 0;
62         mStartTime = 0;
63         mEndTime = 0;
64 }
65
66
67 AliHLTPredicProcTempMonitor::~AliHLTPredicProcTempMonitor() {
68         // D-tor for AliHLTPredicProcTempMonitor
69
70 }
71
72
73 UInt_t AliHLTPredicProcTempMonitor::makePrediction(Bool_t doPrediction) {
74         // switch for prediction making in AliHLTPredicProcTempMonitor
75         Log("AliHLTPredicProcTempMonitor + B-Field extractor: prediction switched on");
76         mPredict = doPrediction;
77         return 0;
78 }
79
80
81 void AliHLTPredicProcTempMonitor::Initialize(Int_t run, UInt_t startTime, 
82                         UInt_t endTime) {
83         // initializes AliHLTPredicProcTempMonitor
84         mRun = run;
85         mStartTime = startTime;
86         mEndTime = endTime;
87
88         TString msg("Initialized HLT PredictionProcessor; Run: ");
89         msg += mRun;
90         msg += ", start time: ";
91         msg += mStartTime;
92         msg += ", end time: ";
93         msg += mEndTime;
94         msg += ".";     
95         Log(msg.Data());
96 }
97
98
99 UInt_t AliHLTPredicProcTempMonitor::Process(TMap* dcsAliasMap) {
100         // processes the DCS value map in AliHLTPredicProcTempMonitor
101         UInt_t beamPeriod = 0;
102         
103         UInt_t retVal = 0;
104         UInt_t tempRet = 0;
105         Int_t start = 0;
106         TMap* tempMap = 0;
107         Bool_t infiniteValid = kFALSE;
108         
109                 
110         //test GetFromOCDB() calls
111         AliCDBEntry* entry = GetFromOCDB(kPath2.Data(), kPath3.Data());
112         if (entry == 0) {
113                 // No object in HCDB -> discarding old values
114                 TString msg("No '" + kPath2 + "/" + kPath3 + 
115                                 "' in HCDB, most likely first round, filling object now...");
116                 Log(msg.Data());
117                 tempMap = dcsAliasMap;
118                 
119         } else {
120                 Log("Old data is already stored in HCDB, but now discarding that...");
121                 tempMap = dcsAliasMap; 
122         
123 // If old data shall be included use lines below and uncomment lines above
124 /*
125                 Log("Adding new DCS value to old Temperature map...");
126                 // Adding new DCS values to old Temperature map 
127                 tempMap = (TMap*) entry->GetObject();
128
129                 TMapIter iter(dcsAliasMap);        // iterator for values in TMap
130                 TObject* aKey;
131                            
132                 while ((aKey = iter.Next())) {
133                         tempMap->Add(aKey, dcsAliasMap->GetValue(aKey));
134                 }
135 */
136         }
137
138         AliCDBMetaData meta(kCreator.Data(), beamPeriod, kAliRootVersion.Data(), 
139                         kComment.Data());
140
141         if (Store(kPath2.Data(), kPath3.Data(), (TObject*) tempMap, &meta, start, 
142                         infiniteValid)) {
143                 TString msg(" +++ Successfully stored object '" + kPath2 + "/" + kPath3 + 
144                                 "' in HCDB.");
145                 Log(msg.Data());
146         } else {
147                 TString msg(" *** Storing of object '" + kPath2 + "/" + kPath3 + 
148                                 "' in HCDB failed.");
149                 Log(msg.Data());
150                 retVal = kUnableToStoreObject;
151         }
152
153         // extract B-Field
154         tempRet = ExtractBField(dcsAliasMap);
155         retVal = tempRet & retVal; // combine retvals
156         
157         return retVal;
158 }
159
160 UInt_t AliHLTPredicProcTempMonitor::ExtractBField(TMap* dcsAliasMap) {
161         // extracts the B-field value from DCS value map
162   
163         TString stringId = "dcs_magnet:Magnet/ALICESolenoid.Current";
164   
165         Float_t BField = 0; 
166         Bool_t bRet = GetSensorValue(dcsAliasMap,stringId.Data(),&BField);
167
168         if (bRet) {
169                 BField = BField / 60000; // If we get field, take this away and change SensorValue
170                 TString dummy("-bfield ");
171                 dummy += BField;
172                 TObjString dummy2(dummy.Data());
173                 mBField = dummy2; 
174                 Log(Form("BField set to %s", mBField.String().Data())); 
175         } else {
176                 return 1;
177         }
178
179         TString path2("Config");
180         TString path3("BField");
181         Int_t start = 0;
182
183         TString comment("BField");
184         AliCDBMetaData meta(this->GetName(), 0, "unknownAliRoot", comment.Data());
185   
186         if (Store(path2.Data(), path3.Data(), (TObject*) (&mBField), &meta, start, 
187                         kTRUE)) {
188                 Log(" +++ Successfully stored object ;-)");
189         } else {
190                 Log(" *** Storing of OBJECT failed!!");
191                 return 7;
192         }
193
194         return 0;
195 }
196
197 Bool_t AliHLTPredicProcTempMonitor::GetSensorValue(TMap* dcsAliasMap,
198                         const char* stringId, Float_t *value) {
199         // retreives the sensor value
200   // return last value read from sensor specified by stringId
201   
202         TObjArray* valueSet;
203         TPair* pair = (TPair*) (dcsAliasMap->FindObject(stringId));
204         if (pair) {
205                 valueSet = (TObjArray*) (pair->Value());
206                 if (valueSet) {
207                         Int_t nentriesDCS = (valueSet->GetEntriesFast()) - 1;
208                         if (nentriesDCS >= 0) {
209                                 AliDCSValue* val = (AliDCSValue*) (valueSet->At(nentriesDCS));
210                                 if (val) {
211                                         *value = val->GetFloat();
212                                         return kTRUE;
213                                 }
214                         }
215                 }
216         }
217         return kFALSE;
218 }
219
220 TMap* AliHLTPredicProcTempMonitor::produceTestData(TString aliasName) {
221         // produces test data for AliHLTPredicProcTempMonitor
222     TMap* resultMap = 0;
223
224     // here has to come real dummy data :-)
225     resultMap = new TMap();
226     TTimeStamp tt;
227         Float_t fval = 33.3;
228     TObjString* name = new TObjString("DummyData");
229     AliDCSValue* val = new AliDCSValue(fval, tt.GetTime());
230     TObjArray* arr = new TObjArray();
231     arr->Add(val);
232     resultMap->Add(name, arr);
233
234     return resultMap;
235 }
236
237