3 hisograms for online satellite monitoring added
[u/mrichter/AliRoot.git] / T0 / AliT0Preprocessor.cxx
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: AliT0Preprocessor.cxx,v $
18 Revision 1.8  2007/12/07 15:22:51  alla
19 bug fixed by Alberto
20  
21 Revision 1.7  2007/12/06 16:35:24  alla
22 new bugs fixed by Tomek
23
24 Revision 1.5  2007/11/23 19:28:52  alla
25 bug fixed
26
27 Version 2.1  2007/11/21 
28 Preprocessor storing data to OCDB (T.Malkiewicz)
29
30 Version 1.1  2006/10   
31 Preliminary test version (T.Malkiewicz)
32 */   
33 // T0 preprocessor:
34 // 1) takes data from DCS and passes it to the class AliTOFDataDCS 
35 // for processing and writes the result to the Reference DB.
36 // 2) takes data form DAQ (both from Laser Calibration and Physics runs), 
37 // processes it, and stores either to OCDB or to Reference DB.
38
39
40 #include "AliT0Preprocessor.h"
41 #include "AliT0DataDCS.h"
42 #include "AliT0CalibWalk.h"
43 #include "AliT0CalibTimeEq.h"
44
45 #include "AliCDBMetaData.h"
46 #include "AliDCSValue.h"
47 #include "AliCDBEntry.h"
48 #include "AliLog.h"
49
50 #include <TTimeStamp.h>
51 #include <TFile.h>
52 #include <TObjString.h>
53 #include <TNamed.h>
54 #include "AliT0Dqclass.h"
55 #include "TClass.h"
56
57
58 ClassImp(AliT0Preprocessor)
59
60 //____________________________________________________
61 AliT0Preprocessor::AliT0Preprocessor(AliShuttleInterface* shuttle) : 
62   AliPreprocessor("T00", shuttle), 
63   fData(0)
64 {
65   //constructor
66   AddRunType("PHYSICS");
67   AddRunType("STANDALONE");
68   AddRunType("AMPLITUDE_CALIBRATION");
69 }
70 //____________________________________________________
71
72 AliT0Preprocessor::~AliT0Preprocessor()
73 {
74   //destructor
75   delete fData;
76   fData = 0;
77 }
78 //____________________________________________________
79
80 void AliT0Preprocessor::Initialize(Int_t run, UInt_t startTime, UInt_t endTime)
81 {
82   // Creates AliT0DataDCS object
83   AliPreprocessor::Initialize(run, startTime, endTime);
84   AliInfo(Form("\n\tRun %d \n\tStartTime %s \n\tEndTime %s", run, TTimeStamp(startTime).AsString(), TTimeStamp(endTime).AsString()));
85   fData = new AliT0DataDCS(fRun, fStartTime, fEndTime, GetStartTimeDCSQuery(), GetEndTimeDCSQuery());
86 }
87 //____________________________________________________
88
89 Bool_t AliT0Preprocessor::ProcessDCS(){
90         // Check whether DCS should be processed or not...
91         TString runType = GetRunType();
92         Log(Form("ProcessDCS - RunType: %s",runType.Data()));
93
94         if(runType == "PHYSICS" )
95           return kTRUE;
96         else
97           return kFALSE;
98         
99 }
100 //____________________________________________________
101
102 UInt_t AliT0Preprocessor::ProcessDCSDataPoints(TMap* dcsAliasMap){
103         // Fills data into AliT0DataDCS object
104         Log("Processing DCS DP");
105         Bool_t resultDCSMap=kFALSE;
106         Bool_t resultDCSStore=kFALSE;
107
108         if(!dcsAliasMap)
109         {
110           Log("No DCS input data");
111           return 1;
112         }
113         else
114         {
115           resultDCSMap=fData->ProcessData(*dcsAliasMap);
116           if(!resultDCSMap)
117           {
118             Log("Error when processing DCS data");
119             return 2;// return error Code for processed DCS data not stored
120           }
121           else
122           {
123             AliCDBMetaData metaDataDCS;
124             metaDataDCS.SetBeamPeriod(0);
125             metaDataDCS.SetResponsible("Tomasz Malkiewicz");
126             metaDataDCS.SetComment("This preprocessor fills an AliTODataDCS object.");
127             AliInfo("Storing DCS Data");
128             resultDCSStore = StoreReferenceData("Calib","DCSData",fData, &metaDataDCS);
129             if (!resultDCSStore)
130             {
131               Log("Some problems occurred while storing DCS data results in ReferenceDB");
132               return 2;// return error Code for processed DCS data not stored
133             }
134           }
135         }
136         return 0;
137 }
138 //____________________________________________________
139
140 UInt_t AliT0Preprocessor::ProcessLaser()
141 {
142   // Processing data from DAQ Standalone run
143   Log("Processing Laser calibration - Walk Correction");
144   Bool_t resultLaser = kFALSE;
145   Bool_t writeok = kFALSE;
146   //processing DAQ
147   TList* list = GetFileSources(kDAQ, "AMPLITUDE_CALIBRATION");
148   AliT0CalibWalk *laser = new AliT0CalibWalk();
149   TObjString *source;
150   if (list)
151     {
152       TIter iter(list);
153       while ((source = dynamic_cast<TObjString *> (iter.Next())))
154         {
155           const char *laserFile = GetFile(kDAQ, "AMPLITUDE_CALIBRATION", source->GetName());
156           if (laserFile)
157             {
158               Log(Form("File with Id AMPLITUDE_CALIBRAION found in source %s!", source->GetName()));
159              writeok = laser->MakeWalkCorrGraph(laserFile);
160               
161             }
162         }
163       
164       AliCDBMetaData metaData;
165       metaData.SetBeamPeriod(0);
166       metaData.SetResponsible("Tomek&Michal");
167       metaData.SetComment("Walk correction from laser runs.");
168       if (writeok) resultLaser=Store("Calib","Slewing_Walk", laser, &metaData, 0, 1);
169       else {
170         
171         Log(Form("writeok = %d no peaks in CFD spectra",writeok));
172         return 0;
173       }           
174       Log(Form("resultLaser = %d",resultLaser));
175       if (!resultLaser)
176         {
177           Log("No Laser Data stored");
178           return 3;//return error code for failure in storing Laser Data
179         }
180     }
181   else
182     {
183       Log(Form("Could not find file with Id  AMPLITUDE_CALIBRAION "));
184       return 1;
185     }
186   
187    return 0;
188 }
189
190 //____________________________________________________
191
192 UInt_t AliT0Preprocessor::ProcessPhysics(){
193         //Processing data from DAQ Physics run
194         Log("Processing Physics");
195         
196         Bool_t resultOnline=kFALSE; 
197         //processing DAQ
198         TList* listPhys = GetFileSources(kDAQ, "PHYSICS");
199         if (listPhys)
200           {
201             TIter iter(listPhys);
202             TObjString *sourcePhys;
203             while ((sourcePhys = dynamic_cast<TObjString *> (iter.Next())))
204             {
205               const char *filePhys = GetFile(kDAQ, "PHYSICS", sourcePhys->GetName());
206               if (filePhys)
207               {
208                 AliT0CalibTimeEq *online = new AliT0CalibTimeEq();
209                 online->Reset();
210                 Bool_t writeok = online->ComputeOnlineParams(filePhys);
211                 AliCDBMetaData metaData;
212                 metaData.SetBeamPeriod(0);
213                 metaData.SetResponsible("Alla Maevskaya");
214                 metaData.SetComment("Time equalizing result.");
215
216                 if (writeok) resultOnline = Store("Calib","TimeDelay", online, &metaData, 0, 1);
217                 else {
218                   
219                   Log(Form("writeok = %d not enough data for equalizing",resultOnline));
220                   return 0;
221                 }                 
222                 Log(Form("resultOnline = %d",resultOnline));
223                 delete online;
224               }
225                 else
226               {
227                 Log(Form("Could not find file with Id PHYSICS in source %s!", sourcePhys->GetName()));
228                 return 1;
229               }
230               
231             }
232             if (!resultOnline)
233             {
234               Log("No Data stored");
235               return 4;//return error code for failure in storing OCDB Data
236             }
237           } else {
238                 Log("No sources found for id PHYSICS!");
239                 return 1;
240           }
241         return 0;
242 }
243 //____________________________________________________
244
245 UInt_t AliT0Preprocessor::Process(TMap* dcsAliasMap )
246 {
247   // T0 preprocessor return codes:
248   // return=0 : all ok
249   // return=1 : no DCS input data 
250   // return=2 : failed to store DCS data
251   // return=3 : no Laser data (Walk correction)
252   // return=4 : failed to store OCDB time equalized data
253   // return=5 : no DAQ input for OCDB
254   // return=6 : failed to retrieve DAQ data from OCDB
255   // return=7 : failed to store T0 OCDB data
256   // return=8 : not enough data for equalizing
257   Bool_t dcsDP = ProcessDCS();
258   Log(Form("dcsDP = %d",dcsDP));        
259   TString runType = GetRunType();
260   Log(Form("RunType: %s",runType.Data()));
261   //processing
262   if(runType == "STANDALONE"){
263     if(dcsDP==1){
264       Int_t iresultDCS = ProcessDCSDataPoints(dcsAliasMap);
265       return iresultDCS;
266     }
267   }
268   
269   if(runType == "AMPLITUDE_CALIBRATION"){
270     Int_t iresultLaser = ProcessLaser();
271     if(dcsDP==1){
272       Int_t iresultDCS = ProcessDCSDataPoints(dcsAliasMap);
273       return iresultDCS;
274     }
275     
276     Log(Form("iresultLaser = %d",iresultLaser));
277     return iresultLaser;
278   }
279   
280   else if(runType == "PHYSICS"){
281     Int_t iresultPhysics = ProcessPhysics();
282     if(dcsDP==1){
283       Int_t iresultDCS = ProcessDCSDataPoints(dcsAliasMap);
284       return iresultDCS;
285     }
286     Log(Form("iresultPhysics = %d",iresultPhysics));
287           return iresultPhysics; 
288       }
289   
290         
291         
292         return 0;
293 }