Improved QAchecker and plots for DQM
[u/mrichter/AliRoot.git] / TOF / AliTOFPreprocessorFDR.cxx
CommitLineData
dc043f85 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/*
17$Log$
6b9a73fd 18Revision 1.4 2007/12/05 13:55:18 zampolli
19Initialization bug fixed.
20
41024dec 21Revision 1.3 2007/11/27 13:12:30 zampolli
22CDB object run range upper limit extended to AliCDBRunRange::Infinity()
23
22363630 24Revision 1.2 2007/11/27 07:24:41 zampolli
25Log used, fData member removed
26
d1034a96 27Revision 1.1 2007/11/24 18:36:27 zampolli
28TOF Preprocessor for FDR
29
dc043f85 30*/
31
a174d599 32//#include <Riostream.h>
33//#include <stdio.h>
34//#include <stdlib.h>
dc043f85 35
a174d599 36//#include <TFile.h>
dc043f85 37#include <TH1.h>
dc043f85 38#include <TMath.h>
39#include <TObjArray.h>
a174d599 40//#include <TObjString.h>
dc043f85 41#include <TTimeStamp.h>
42
43#include "AliCDBMetaData.h"
44#include "AliLog.h"
a174d599 45
46//#include "AliTOFDataDCS.h"
47//#include "AliTOFGeometry.h"
dc043f85 48#include "AliTOFPreprocessorFDR.h"
49#include "AliTOFFormatDCS.h"
50#include "AliDCSValue.h"
51
dc043f85 52// TOF preprocessor class.
53// It takes data from DCS and passes them to the class AliTOFDataDCS, which
54// processes them. The result is then written to the CDB.
55// analogously, it takes data form DAQ (both at Run level and inclusive -
56// of all the runs - level, processes them, and stores both Reference Data
57// and Online Calibration files in the CDB.
58
59
60ClassImp(AliTOFPreprocessorFDR)
61
62//_____________________________________________________________________________
63
64AliTOFPreprocessorFDR::AliTOFPreprocessorFDR(AliShuttleInterface* shuttle) :
65 AliPreprocessor("TOF", shuttle),
dc043f85 66 fStoreRefData(kTRUE)
67{
68 // constructor
370aeff7 69 AddRunType("PHYSICS");
dc043f85 70
71}
72
73//_____________________________________________________________________________
74
75AliTOFPreprocessorFDR::~AliTOFPreprocessorFDR()
76{
77 // destructor
dc043f85 78}
79
80//______________________________________________________________________________
81void AliTOFPreprocessorFDR::Initialize(Int_t run, UInt_t startTime,
82 UInt_t endTime)
83{
84 // Creates AliTOFDataDCS object
85
86 AliPreprocessor::Initialize(run, startTime, endTime);
87
d1034a96 88 Log(Form("\n\tRun %d \n\tStartTime %s \n\tEndTime %s", run,
dc043f85 89 TTimeStamp(startTime).AsString(),
90 TTimeStamp(endTime).AsString()));
91
dc043f85 92}
93
94//_____________________________________________________________________________
95
96UInt_t AliTOFPreprocessorFDR::ProcessDCSDataPoints(TMap* aliasMap)
97{
98 // Fills data into a AliTOFDataDCS object
99 // return codes:
100 // return=0 : all ok
101 // return=1 : no DCS input data Map
102 // return=2 : no DCS processed data was stored in Ref Data
103 // return=3 : no DCS processed data was stored in OCDB
104
105 if (!aliasMap){
106 Log("No DCS map found: TOF exiting from Shuttle");
107 return 1;// return error Code for DCS input data not found
108 }
109
110 else {
111
112 AliDCSValue* aValue;
113 AliDCSValue* aValue1;
114 Float_t timeMin = (Float_t)fStartTime;
115 Float_t timeMax = (Float_t)fEndTime;
116 Float_t val=0;
117 Float_t val1=0;
118 Float_t time=0;
119 Float_t delta[2];
120 Float_t timedelta[2];
121
122 TH1::AddDirectory(0);
123
124 Bool_t resultDCSMap=kFALSE;
125 Bool_t resultDCSStore=kFALSE;
126
127 TString aliasDP[4]={"tof_lv_i48_02","tof_lv_v48_02","tof_lv_i33_02","tof_lv_v33_02"};
128
129 TObjArray *array = new TObjArray(4);
130 array->SetOwner();
131
6b9a73fd 132 AliTOFFormatDCS *lvI4802 = new AliTOFFormatDCS();
133 AliTOFFormatDCS *lvV4802 = new AliTOFFormatDCS();
134 AliTOFFormatDCS *lvI3302 = new AliTOFFormatDCS();
135 AliTOFFormatDCS *lvV3302 = new AliTOFFormatDCS();
dc043f85 136
6b9a73fd 137 array->AddAt(lvI4802,0);
138 array->AddAt(lvV4802,1);
139 array->AddAt(lvI3302,2);
140 array->AddAt(lvV3302,3);
dc043f85 141
142 // processing DCS
143
144 for (Int_t i=0;i<4;i++){
41024dec 145 for (Int_t idelta =0;idelta<2;idelta++){
146 delta[idelta]=0;
147 timedelta[idelta]=0;
148 }
dc043f85 149 TObjArray *aliasArr = (TObjArray*) aliasMap->GetValue(aliasDP[i].Data());
150
151 if(!aliasArr){
d1034a96 152 Log(Form("Alias %s not found!", aliasDP[i].Data()));
dc043f85 153 return kFALSE;
154 }
155
156 if(aliasArr->GetEntries()<3){
d1034a96 157 Log(Form("Alias %s has just %d entries!",
dc043f85 158 aliasDP[i].Data(),aliasArr->GetEntries()));
159 continue;
160 }
161
162 TIter iterarray(aliasArr);
163
164 Int_t nentries = aliasArr->GetEntries();
165 Int_t deltaTimeStamp = (Int_t) nentries/3;
166 Int_t deltaTimeStamp1 = (Int_t) nentries/2;
167
168 // filling aliases with 10 floats+1 Usign
169 Int_t index = 0;
170 for (Int_t k=0;k<3;k++){
171 index = deltaTimeStamp*k;
172 if (k==0) {
173 index=0;
174 }
175 else if (k==1) {
176 index=deltaTimeStamp1;
177 }
178 else if (k==2) {
179 index=nentries-1;
180 }
181 aValue = (AliDCSValue*) aliasArr->At(index);
182 val = aValue->GetFloat();
183 time = (Float_t) (aValue->GetTimeStamp());
184 if (i==0){
41024dec 185 AliDebug(1,Form("tof_lv_i48_02: setting value %i to %f at %f",k,val,time));
6b9a73fd 186 lvI4802->SetFloat(k,val);
187 lvI4802->SetTimeStampFloat(k,time);
dc043f85 188 }
189 else if (i==1){
41024dec 190 AliDebug(1,Form("tof_lv_v48_02: setting value %i to %f at %f",k,val,time));
6b9a73fd 191 lvV4802->SetFloat(k,val);
192 lvV4802->SetTimeStampFloat(k,time);
dc043f85 193 }
194 else if (i==2){
41024dec 195 AliDebug(1,Form("tof_lv_i33_02: setting value %i to %f at %f",k,val,time));
6b9a73fd 196 lvI3302->SetFloat(k,val);
197 lvI3302->SetTimeStampFloat(k,time);
dc043f85 198 }
199 else if (i==3){
41024dec 200 AliDebug(1,Form("tof_lv_v33_02: setting value %i to %f at %f",k,val,time));
6b9a73fd 201 lvV3302->SetFloat(k,val);
202 lvV3302->SetTimeStampFloat(k,time);
dc043f85 203 }
204 }
205
206 // computing the most significant variations
207
208 Int_t deltamin = (Int_t)(60/(timeMax-timeMin)*nentries);
209 Int_t klast = nentries-deltamin;
210
211 for (Int_t k=0;k<klast;k++){
212 aValue = (AliDCSValue*) aliasArr->At(k);
213 aValue1 = (AliDCSValue*) aliasArr->At(k+deltamin);
214 val = aValue->GetFloat();
215 val1 = aValue1->GetFloat();
216 if (delta[0]<=TMath::Abs(val1-val)) {
217 delta[0]=TMath::Abs(val1-val);
218 timedelta[0] = (Float_t)k;
219 }
220 if (delta[1]<=delta[0]) {
221 Float_t temp = delta[1];
222 Float_t timetemp = timedelta[1];
223 delta[1]=delta[0];
224 delta[0]=temp;
225 timedelta[1]=timedelta[0];
226 timedelta[0]=timetemp;
227 }
228 }
229
230 for (Int_t kk=0;kk<2;kk++){
231 if (i==0){
232 AliDebug(1,Form("tof_lv_i48: setting variation %i to %f at %f",kk,delta[kk],timedelta[kk]));
6b9a73fd 233 lvI4802->SetDelta(kk,delta[kk]);
234 lvI4802->SetTimeStampDelta(kk,(Float_t)timedelta[kk]);
dc043f85 235 }
236 else if (i==1){
237 AliDebug(1,Form("tof_lv_v48: setting variation %i to %f at %f",kk,delta[kk],timedelta[kk]));
6b9a73fd 238 lvV4802->SetDelta(kk,delta[kk]);
239 lvV4802->SetTimeStampDelta(kk,(Float_t)timedelta[kk]);
dc043f85 240 }
241 else if (i==2){
242 AliDebug(1,Form("tof_lv_i33: setting variation %i to %f at %f",kk,delta[kk],timedelta[kk]));
6b9a73fd 243 lvI3302->SetDelta(kk,delta[kk]);
244 lvI3302->SetTimeStampDelta(kk,(Float_t)timedelta[kk]);
dc043f85 245 }
246 else if (i==3){
247 AliDebug(1,Form("tof_lv_v33: setting variation %i to %f at %f",kk,delta[kk],timedelta[kk]));
6b9a73fd 248 lvV3302->SetDelta(kk,delta[kk]);
249 lvV3302->SetTimeStampDelta(kk,(Float_t)timedelta[kk]);
dc043f85 250 }
251 }
252 }
253
254 AliCDBMetaData metaDataDCS;
255 metaDataDCS.SetBeamPeriod(0);
256 metaDataDCS.SetResponsible("Chiara Zampolli");
257 metaDataDCS.SetComment("This preprocessor fills an AliTOFDataDCS object.");
d1034a96 258 Log("Storing DCS Data");
dc043f85 259 resultDCSStore = StoreReferenceData("Calib","DCSData",array, &metaDataDCS);
260 if (!resultDCSStore){
261 Log("Some problems occurred while storing DCS data results in Reference Data, TOF exiting from Shuttle");
262 return 2;// return error Code for processed DCS data not stored
263 // in reference data
264 }
265
d1034a96 266 Log("Storing DCS Data in OCDB");
22363630 267 resultDCSMap = Store("Calib","DCSData",array, &metaDataDCS,0,kTRUE);
c2ee9987 268 if (!resultDCSMap){
dc043f85 269 Log("Some problems occurred while storing DCS data results in OCDB, TOF exiting from Shuttle");
270 return 3;// return error Code for processed DCS data not stored
271 // in reference data
272 }
273
c2ee9987 274 delete array;
dc043f85 275 return 0;
276
277 }
278
279}
280//_____________________________________________________________________________
281
282UInt_t AliTOFPreprocessorFDR::Process(TMap* dcsAliasMap)
283{
284 // Fills data into a AliTOFDataDCS object
285 // return codes:
286 // return=0 : all ok
287 // return=1 : no DCS input data Map
288 // return=2 : no DCS processed data was stored in Ref Data
289 // return=3 : no DCS processed data was stored in OCDB
290
291 TH1::AddDirectory(0);
292
293 // processing
294
295 Int_t iresultDCS = ProcessDCSDataPoints(dcsAliasMap);
296 if ((iresultDCS == 1) || (iresultDCS == 2) || (iresultDCS == 3)) return iresultDCS;
297
298 return 0;
299}
300
301