1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 Revision 1.4 2007/12/05 13:55:18 zampolli
19 Initialization bug fixed.
21 Revision 1.3 2007/11/27 13:12:30 zampolli
22 CDB object run range upper limit extended to AliCDBRunRange::Infinity()
24 Revision 1.2 2007/11/27 07:24:41 zampolli
25 Log used, fData member removed
27 Revision 1.1 2007/11/24 18:36:27 zampolli
28 TOF Preprocessor for FDR
32 //#include <Riostream.h>
39 #include <TObjArray.h>
40 //#include <TObjString.h>
41 #include <TTimeStamp.h>
43 #include "AliCDBMetaData.h"
46 //#include "AliTOFDataDCS.h"
47 //#include "AliTOFGeometry.h"
48 #include "AliTOFPreprocessorFDR.h"
49 #include "AliTOFFormatDCS.h"
50 #include "AliDCSValue.h"
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.
60 ClassImp(AliTOFPreprocessorFDR)
62 //_____________________________________________________________________________
64 AliTOFPreprocessorFDR::AliTOFPreprocessorFDR(AliShuttleInterface* shuttle) :
65 AliPreprocessor("TOF", shuttle),
72 //_____________________________________________________________________________
74 AliTOFPreprocessorFDR::~AliTOFPreprocessorFDR()
79 //______________________________________________________________________________
80 void AliTOFPreprocessorFDR::Initialize(Int_t run, UInt_t startTime,
83 // Creates AliTOFDataDCS object
85 AliPreprocessor::Initialize(run, startTime, endTime);
87 Log(Form("\n\tRun %d \n\tStartTime %s \n\tEndTime %s", run,
88 TTimeStamp(startTime).AsString(),
89 TTimeStamp(endTime).AsString()));
93 //_____________________________________________________________________________
95 UInt_t AliTOFPreprocessorFDR::ProcessDCSDataPoints(TMap* aliasMap)
97 // Fills data into a AliTOFDataDCS object
100 // return=1 : no DCS input data Map
101 // return=2 : no DCS processed data was stored in Ref Data
102 // return=3 : no DCS processed data was stored in OCDB
105 Log("No DCS map found: TOF exiting from Shuttle");
106 return 1;// return error Code for DCS input data not found
112 AliDCSValue* aValue1;
113 Float_t timeMin = (Float_t)fStartTime;
114 Float_t timeMax = (Float_t)fEndTime;
119 Float_t timedelta[2];
121 TH1::AddDirectory(0);
123 Bool_t resultDCSMap=kFALSE;
124 Bool_t resultDCSStore=kFALSE;
126 TString aliasDP[4]={"tof_lv_i48_02","tof_lv_v48_02","tof_lv_i33_02","tof_lv_v33_02"};
128 TObjArray *array = new TObjArray(4);
131 AliTOFFormatDCS *lvI4802 = new AliTOFFormatDCS();
132 AliTOFFormatDCS *lvV4802 = new AliTOFFormatDCS();
133 AliTOFFormatDCS *lvI3302 = new AliTOFFormatDCS();
134 AliTOFFormatDCS *lvV3302 = new AliTOFFormatDCS();
136 array->AddAt(lvI4802,0);
137 array->AddAt(lvV4802,1);
138 array->AddAt(lvI3302,2);
139 array->AddAt(lvV3302,3);
143 for (Int_t i=0;i<4;i++){
144 for (Int_t idelta =0;idelta<2;idelta++){
148 TObjArray *aliasArr = (TObjArray*) aliasMap->GetValue(aliasDP[i].Data());
151 Log(Form("Alias %s not found!", aliasDP[i].Data()));
155 if(aliasArr->GetEntries()<3){
156 Log(Form("Alias %s has just %d entries!",
157 aliasDP[i].Data(),aliasArr->GetEntries()));
161 TIter iterarray(aliasArr);
163 Int_t nentries = aliasArr->GetEntries();
164 Int_t deltaTimeStamp = (Int_t) nentries/3;
165 Int_t deltaTimeStamp1 = (Int_t) nentries/2;
167 // filling aliases with 10 floats+1 Usign
169 for (Int_t k=0;k<3;k++){
170 index = deltaTimeStamp*k;
175 index=deltaTimeStamp1;
180 aValue = (AliDCSValue*) aliasArr->At(index);
181 val = aValue->GetFloat();
182 time = (Float_t) (aValue->GetTimeStamp());
184 AliDebug(1,Form("tof_lv_i48_02: setting value %i to %f at %f",k,val,time));
185 lvI4802->SetFloat(k,val);
186 lvI4802->SetTimeStampFloat(k,time);
189 AliDebug(1,Form("tof_lv_v48_02: setting value %i to %f at %f",k,val,time));
190 lvV4802->SetFloat(k,val);
191 lvV4802->SetTimeStampFloat(k,time);
194 AliDebug(1,Form("tof_lv_i33_02: setting value %i to %f at %f",k,val,time));
195 lvI3302->SetFloat(k,val);
196 lvI3302->SetTimeStampFloat(k,time);
199 AliDebug(1,Form("tof_lv_v33_02: setting value %i to %f at %f",k,val,time));
200 lvV3302->SetFloat(k,val);
201 lvV3302->SetTimeStampFloat(k,time);
205 // computing the most significant variations
207 Int_t deltamin = (Int_t)(60/(timeMax-timeMin)*nentries);
208 Int_t klast = nentries-deltamin;
210 for (Int_t k=0;k<klast;k++){
211 aValue = (AliDCSValue*) aliasArr->At(k);
212 aValue1 = (AliDCSValue*) aliasArr->At(k+deltamin);
213 val = aValue->GetFloat();
214 val1 = aValue1->GetFloat();
215 if (delta[0]<=TMath::Abs(val1-val)) {
216 delta[0]=TMath::Abs(val1-val);
217 timedelta[0] = (Float_t)k;
219 if (delta[1]<=delta[0]) {
220 Float_t temp = delta[1];
221 Float_t timetemp = timedelta[1];
224 timedelta[1]=timedelta[0];
225 timedelta[0]=timetemp;
229 for (Int_t kk=0;kk<2;kk++){
231 AliDebug(1,Form("tof_lv_i48: setting variation %i to %f at %f",kk,delta[kk],timedelta[kk]));
232 lvI4802->SetDelta(kk,delta[kk]);
233 lvI4802->SetTimeStampDelta(kk,(Float_t)timedelta[kk]);
236 AliDebug(1,Form("tof_lv_v48: setting variation %i to %f at %f",kk,delta[kk],timedelta[kk]));
237 lvV4802->SetDelta(kk,delta[kk]);
238 lvV4802->SetTimeStampDelta(kk,(Float_t)timedelta[kk]);
241 AliDebug(1,Form("tof_lv_i33: setting variation %i to %f at %f",kk,delta[kk],timedelta[kk]));
242 lvI3302->SetDelta(kk,delta[kk]);
243 lvI3302->SetTimeStampDelta(kk,(Float_t)timedelta[kk]);
246 AliDebug(1,Form("tof_lv_v33: setting variation %i to %f at %f",kk,delta[kk],timedelta[kk]));
247 lvV3302->SetDelta(kk,delta[kk]);
248 lvV3302->SetTimeStampDelta(kk,(Float_t)timedelta[kk]);
253 AliCDBMetaData metaDataDCS;
254 metaDataDCS.SetBeamPeriod(0);
255 metaDataDCS.SetResponsible("Chiara Zampolli");
256 metaDataDCS.SetComment("This preprocessor fills an AliTOFDataDCS object.");
257 Log("Storing DCS Data");
258 resultDCSStore = StoreReferenceData("Calib","DCSData",array, &metaDataDCS);
259 if (!resultDCSStore){
260 Log("Some problems occurred while storing DCS data results in Reference Data, TOF exiting from Shuttle");
261 return 2;// return error Code for processed DCS data not stored
265 Log("Storing DCS Data in OCDB");
266 resultDCSMap = Store("Calib","DCSData",array, &metaDataDCS,0,kTRUE);
267 if (!resultDCSStore){
268 Log("Some problems occurred while storing DCS data results in OCDB, TOF exiting from Shuttle");
269 return 3;// return error Code for processed DCS data not stored
273 if (array) delete array;
279 //_____________________________________________________________________________
281 UInt_t AliTOFPreprocessorFDR::Process(TMap* dcsAliasMap)
283 // Fills data into a AliTOFDataDCS object
286 // return=1 : no DCS input data Map
287 // return=2 : no DCS processed data was stored in Ref Data
288 // return=3 : no DCS processed data was stored in OCDB
290 TH1::AddDirectory(0);
294 Int_t iresultDCS = ProcessDCSDataPoints(dcsAliasMap);
295 if ((iresultDCS == 1) || (iresultDCS == 2) || (iresultDCS == 3)) return iresultDCS;