Line data Source code
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: AliTOFDataDCS.cxx,v $
18 : Revision 1.9 2007/05/04 14:02:45 decaro
19 : AliTOFDataDCS::Draw(Option_t *) method declared const: compiling warning suppression
20 :
21 : Revision 1.8 2007/05/03 09:45:09 decaro
22 : Coding convention: RN11 violation -> suppression
23 :
24 : Revision 1.7 2007/05/02 14:09:39 arcelli
25 : Retrieval of Env. Temperature removed (will get it from the GRP)
26 :
27 : Revision 1.6 2007/04/04 17:19:19 arcelli
28 : Moved some printout to debug level
29 :
30 : Revision 1.5 2007/02/20 15:57:00 decaro
31 : Raw data update: to read the TOF raw data defined in UNPACKED mode
32 :
33 : Revision 1.4 2007/02/19 15:41:55 decaro
34 : Coding convention: few corrections
35 :
36 : Revision 1.3 2007/01/24 11:19:58 arcelli
37 : Modify ProcessData to return a logical (CZ)
38 :
39 : Revision 1.2 2006/12/18 18:17:38 arcelli
40 : Updated Aliases for DCS TOF datapoints (C.Zampolli)
41 :
42 : Revision 1.1 2006/10/26 09:10:52 arcelli
43 : Class for handling the TOF DCS data in the Shuttle (C.Zampolli)
44 :
45 : */
46 :
47 : // AliTOFDataDCS class
48 : // main aim to introduce the aliases for the TOF DCS
49 : // data points to be then
50 : // stored in the OCDB, and to process them.
51 : // Process() method called by TOFPrepr
52 :
53 : #include "TString.h"
54 : #include "TTimeStamp.h"
55 : #include "TMap.h"
56 : #include "TCanvas.h"
57 :
58 : #include "AliDCSValue.h"
59 : #include "AliLog.h"
60 :
61 : #include "AliTOFDataDCS.h"
62 : #include "AliTOFFormatDCS.h"
63 :
64 : class TH2;
65 : class AliCDBMetaData;
66 : class TDatime;
67 :
68 26 : ClassImp(AliTOFDataDCS)
69 :
70 : //---------------------------------------------------------------
71 0 : AliTOFDataDCS::AliTOFDataDCS():
72 0 : TObject(),
73 0 : fRun(0),
74 0 : fStartTime(0),
75 0 : fEndTime(0),
76 0 : fStartTimeDCSQuery(0),
77 0 : fEndTimeDCSQuery(0),
78 0 : fIsProcessed(kFALSE),
79 0 : fFDR(kFALSE)
80 0 : {
81 :
82 : // main constructor
83 :
84 0 : for(int i=0;i<kNHV;i++) {
85 0 : fHVvp[i]=0x0;
86 0 : fHVvn[i]=0x0;
87 0 : fHVip[i]=0x0;
88 0 : fHVin[i]=0x0;
89 : }
90 :
91 :
92 0 : }
93 :
94 : //---------------------------------------------------------------
95 0 : AliTOFDataDCS::AliTOFDataDCS(Int_t nRun, UInt_t startTime, UInt_t endTime, UInt_t startTimeDCSQuery, UInt_t endTimeDCSQuery):
96 0 : TObject(),
97 0 : fRun(nRun),
98 0 : fStartTime(startTime),
99 0 : fEndTime(endTime),
100 0 : fStartTimeDCSQuery(startTimeDCSQuery),
101 0 : fEndTimeDCSQuery(endTimeDCSQuery),
102 0 : fIsProcessed(kFALSE),
103 0 : fFDR(kFALSE)
104 0 : {
105 :
106 : // constructor with arguments
107 :
108 0 : AliInfo(Form("\n\tRun %d \n\tStartTime %s \n\tEndTime %s \n\tStartTime DCS Query %s \n\tEndTime DCS Query %s", nRun,
109 : TTimeStamp(startTime).AsString(),
110 : TTimeStamp(endTime).AsString(),
111 : TTimeStamp(startTimeDCSQuery).AsString(),
112 : TTimeStamp(endTimeDCSQuery).AsString()));
113 :
114 0 : Init();
115 :
116 0 : }
117 :
118 : //---------------------------------------------------------------
119 :
120 0 : AliTOFDataDCS::AliTOFDataDCS(const AliTOFDataDCS & data):
121 0 : TObject(data),
122 0 : fRun(data.fRun),
123 0 : fStartTime(data.fStartTime),
124 0 : fEndTime(data.fEndTime),
125 0 : fStartTimeDCSQuery(data.fStartTimeDCSQuery),
126 0 : fEndTimeDCSQuery(data.fEndTimeDCSQuery),
127 0 : fIsProcessed(data.fIsProcessed),
128 0 : fFDR(data.fFDR)
129 :
130 0 : {
131 :
132 : // copy constructor
133 :
134 0 : for(int i=0;i<kNAliases;i++) {
135 0 : fAliasNames[i]=data.fAliasNames[i];
136 : }
137 :
138 0 : for(int i=0;i<kNHV;i++) {
139 0 : fHVvp[i]=data.fHVvp[i];
140 0 : fHVvn[i]=data.fHVvn[i];
141 0 : fHVip[i]=data.fHVip[i];
142 0 : fHVin[i]=data.fHVin[i];
143 : }
144 :
145 :
146 0 : }
147 : //---------------------------------------------------------------
148 :
149 : AliTOFDataDCS& AliTOFDataDCS:: operator=(const AliTOFDataDCS & data) {
150 :
151 : // assignment operator
152 :
153 0 : if (this == &data)
154 0 : return *this;
155 :
156 0 : TObject::operator=(data);
157 0 : fRun=data.GetRun();
158 0 : fStartTime=data.GetStartTime();
159 0 : fEndTime=data.GetEndTime();
160 0 : fStartTimeDCSQuery=data.GetStartTimeDCSQuery();
161 0 : fEndTimeDCSQuery=data.GetEndTimeDCSQuery();
162 :
163 0 : for(int i=0;i<kNAliases;i++) {
164 0 : fAliasNames[i]=data.GetAliasName(i);
165 : }
166 :
167 0 : for(int i=0;i<kNHV;i++) {
168 0 : fHVvp[i]=data.GetHVvp(i);
169 0 : fHVvn[i]=data.GetHVvn(i);
170 0 : fHVip[i]=data.GetHVip(i);
171 0 : fHVin[i]=data.GetHVin(i);
172 : }
173 :
174 :
175 0 : return *this;
176 0 : }
177 : //---------------------------------------------------------------
178 0 : AliTOFDataDCS::~AliTOFDataDCS() {
179 :
180 : // destructor
181 :
182 0 : for(int i=0;i<kNHV;i++) {
183 0 : delete fHVvp[i];
184 0 : fHVvp[i]=0;
185 0 : delete fHVvn[i];
186 0 : fHVvn[i]=0;
187 0 : delete fHVip[i];
188 0 : fHVip[i]=0;
189 0 : delete fHVin[i];
190 0 : fHVin[i]=0;
191 : }
192 :
193 0 : }
194 :
195 : //---------------------------------------------------------------
196 : Bool_t AliTOFDataDCS::ProcessData(TMap& aliasMap){
197 :
198 : // method to process the data
199 :
200 0 : if(!(fAliasNames[0])) Init();
201 :
202 : Float_t val=0;
203 : Float_t val0=0;
204 : Float_t val1=0;
205 : Float_t time=0;
206 : Float_t time0=0;
207 : Float_t time1=0;
208 0 : Float_t delta[2];
209 0 : Float_t timedelta[2];
210 :
211 0 : AliInfo(Form(" Start Time = %i",fStartTime));
212 0 : AliInfo(Form(" End Time = %i",fEndTime));
213 0 : AliInfo(Form(" Start Time DCS Query= %i",fStartTimeDCSQuery));
214 0 : AliInfo(Form(" End Time DCS Query= %i",fEndTimeDCSQuery));
215 :
216 0 : if (fEndTime==fStartTime){
217 0 : AliError(Form(" Run with null time length: start time = %i = end time = %i",fStartTime,fEndTime));
218 0 : return kFALSE;
219 : }
220 :
221 : TObjArray *aliasArr;
222 : AliDCSValue* aValue;
223 : AliDCSValue* aValue0;
224 : AliDCSValue* aValue1;
225 :
226 : // starting loop on aliases
227 0 : for(int j=0; j<kNAliases; j++){
228 0 : for (Int_t k=0;k<2;k++) {
229 0 : delta[k]=0;
230 0 : timedelta[k]=0;
231 : }
232 : //AliInfo(Form("j = %i, with alias = %s",j,fAliasNames[j].Data()));
233 0 : aliasArr = (TObjArray*) aliasMap.GetValue(fAliasNames[j].Data());
234 0 : if(!aliasArr){
235 0 : AliError(Form("Alias %s not found!", fAliasNames[j].Data()));
236 0 : if (!fFDR){
237 0 : return kFALSE; // returning only in case we are not in a FDR run
238 : }
239 : else {
240 : continue;
241 : }
242 : }
243 :
244 0 : Introduce(j, aliasArr);
245 :
246 0 : if(aliasArr->GetEntries()==0){
247 0 : AliError(Form("Alias %s has no entries! Nothing will be stored",
248 : fAliasNames[j].Data()));
249 0 : continue;
250 : }
251 0 : if(aliasArr->GetEntries() == 1){
252 0 : AliWarning(Form("Alias %s has just %d entries! Only first value will be stored",
253 : fAliasNames[j].Data(),aliasArr->GetEntries()));
254 0 : aValue0 = (AliDCSValue*) aliasArr->At(0);
255 0 : val0 = aValue0->GetFloat();
256 0 : time0 = (Float_t) (aValue0->GetTimeStamp());
257 0 : if (j<kNHV){
258 0 : fHVvp[j]->SetFloat(0,val0);
259 0 : fHVvp[j]->SetTimeStampFloat(0,time0);
260 0 : }
261 0 : else if (j<kNHV*2){
262 0 : fHVvn[j-kNHV]->SetFloat(0,val0);
263 0 : fHVvn[j-kNHV]->SetTimeStampFloat(0,time0);
264 0 : }
265 0 : else if (j<kNHV*3){
266 0 : fHVip[j-2*kNHV]->SetFloat(0,val0);
267 0 : fHVip[j-2*kNHV]->SetTimeStampFloat(0,time0);
268 0 : }
269 0 : else if (j<kNHV*4){
270 0 : fHVin[j-3*kNHV]->SetFloat(0,val0);
271 0 : fHVin[j-3*kNHV]->SetTimeStampFloat(0,time0);
272 0 : }
273 : continue;
274 : }
275 0 : if(aliasArr->GetEntries()==2){
276 0 : AliWarning(Form("Alias %s has just %d entries! Storing first and second entry only and the delta between these two",
277 : fAliasNames[j].Data(),aliasArr->GetEntries()));
278 0 : aValue0 = (AliDCSValue*) aliasArr->At(0);
279 0 : val0 = aValue0->GetFloat();
280 0 : time0 = (Float_t) (aValue0->GetTimeStamp());
281 0 : aValue1 = (AliDCSValue*) aliasArr->At(1);
282 0 : val1 = aValue1->GetFloat();
283 0 : time1 = (Float_t) (aValue1->GetTimeStamp());
284 0 : if (j<kNHV){
285 0 : fHVvp[j]->SetFloat(0,val0);
286 0 : fHVvp[j]->SetTimeStampFloat(0,time0);
287 0 : fHVvp[j]->SetFloat(1,val1);
288 0 : fHVvp[j]->SetTimeStampFloat(1,time1);
289 0 : fHVvp[j]->SetDelta(0,TMath::Abs(val1-val0));
290 0 : fHVvp[j]->SetTimeStampDelta(0,time1-time0);
291 0 : }
292 0 : else if (j<kNHV*2){
293 0 : fHVvn[j-kNHV]->SetFloat(0,val0);
294 0 : fHVvn[j-kNHV]->SetTimeStampFloat(0,time0);
295 0 : fHVvn[j-kNHV]->SetFloat(1,val1);
296 0 : fHVvn[j-kNHV]->SetTimeStampFloat(1,time1);
297 0 : fHVvn[j-kNHV]->SetDelta(0,TMath::Abs(val1-val0));
298 0 : fHVvn[j-kNHV]->SetTimeStampDelta(0,time1-time0);
299 0 : }
300 0 : else if (j<kNHV*3){
301 0 : fHVip[j-2*kNHV]->SetFloat(0,val0);
302 0 : fHVip[j-2*kNHV]->SetTimeStampFloat(0,time0);
303 0 : fHVip[j-2*kNHV]->SetFloat(1,val1);
304 0 : fHVip[j-2*kNHV]->SetTimeStampFloat(1,time1);
305 0 : fHVip[j-2*kNHV]->SetDelta(0,TMath::Abs(val1-val0));
306 0 : fHVip[j-2*kNHV]->SetTimeStampDelta(0,time1-time0);
307 0 : }
308 0 : else if (j<kNHV*4){
309 0 : fHVin[j-3*kNHV]->SetFloat(0,val0);
310 0 : fHVin[j-3*kNHV]->SetTimeStampFloat(0,time0);
311 0 : fHVin[j-3*kNHV]->SetFloat(1,val1);
312 0 : fHVin[j-3*kNHV]->SetTimeStampFloat(1,time1);
313 0 : fHVin[j-3*kNHV]->SetDelta(0,TMath::Abs(val1-val0));
314 0 : fHVin[j-3*kNHV]->SetTimeStampDelta(0,time1-time0);
315 0 : }
316 : continue;
317 : }
318 :
319 0 : TIter iterarray(aliasArr);
320 :
321 0 : Int_t nentries = aliasArr->GetEntries();
322 0 : Int_t deltaTimeStamp = (Int_t) nentries/3;
323 0 : Int_t deltaTimeStamp1 = (Int_t) nentries/2;
324 :
325 : // filling aliases with 10 floats+1 Usign
326 : Int_t index = 0;
327 0 : for (Int_t k=0;k<3;k++){
328 0 : index = deltaTimeStamp*k;
329 0 : if (k==0) {
330 : index=0;
331 0 : }
332 0 : else if (k==1) {
333 : index=deltaTimeStamp1;
334 0 : }
335 0 : else if (k==2) {
336 0 : index=nentries-1;
337 0 : }
338 0 : aValue = (AliDCSValue*) aliasArr->At(index);
339 0 : val = aValue->GetFloat();
340 0 : time = (Float_t) (aValue->GetTimeStamp());
341 0 : if (j<kNHV){
342 0 : fHVvp[j]->SetFloat(k,val);
343 0 : fHVvp[j]->SetTimeStampFloat(k,time);
344 0 : }
345 0 : else if (j<kNHV*2){
346 0 : fHVvn[j-kNHV]->SetFloat(k,val);
347 0 : fHVvn[j-kNHV]->SetTimeStampFloat(k,time);
348 0 : }
349 0 : else if (j<kNHV*3){
350 0 : fHVip[j-2*kNHV]->SetFloat(k,val);
351 0 : fHVip[j-2*kNHV]->SetTimeStampFloat(k,time);
352 0 : }
353 0 : else if (j<kNHV*4){
354 0 : fHVin[j-3*kNHV]->SetFloat(k,val);
355 0 : fHVin[j-3*kNHV]->SetTimeStampFloat(k,time);
356 0 : }
357 : }
358 :
359 : //computing the most significant variations
360 :
361 : //Float_t timeDiff = (Float_t)(fEndTime-fStartTime);
362 0 : Float_t timeDiff = (Float_t)(fEndTimeDCSQuery-fStartTimeDCSQuery);
363 0 : Int_t deltamin = (Int_t)(60/timeDiff*nentries); //sampling every minute
364 0 : Int_t klast = nentries-deltamin;
365 :
366 0 : for (Int_t k=0;k<klast;k++){
367 0 : aValue = (AliDCSValue*) aliasArr->At(k);
368 0 : aValue1 = (AliDCSValue*) aliasArr->At(k+deltamin);
369 0 : val = aValue->GetFloat();
370 0 : val1 = aValue1->GetFloat();
371 0 : if (delta[0]<=TMath::Abs(val1-val)) {
372 0 : delta[0]=TMath::Abs(val1-val);
373 0 : timedelta[0] = (Float_t)k;
374 0 : }
375 0 : if (delta[1]<=delta[0]) {
376 : Float_t temp = delta[1];
377 0 : Float_t timetemp = timedelta[1];
378 0 : delta[1]=delta[0];
379 0 : delta[0]=temp;
380 0 : timedelta[1]=timedelta[0];
381 0 : timedelta[0]=timetemp;
382 0 : }
383 : }
384 :
385 0 : for (Int_t kk=0;kk<2;kk++){
386 0 : if (j<kNHV){
387 0 : fHVvp[j]->SetDelta(kk,delta[kk]);
388 0 : fHVvp[j]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]);
389 0 : }
390 0 : else if (j<kNHV*2){
391 0 : fHVvn[j-kNHV]->SetDelta(kk,delta[kk]);
392 0 : fHVvn[j-kNHV]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]);
393 0 : }
394 0 : else if (j<kNHV*3){
395 0 : fHVip[j-2*kNHV]->SetDelta(kk,delta[kk]);
396 0 : fHVip[j-2*kNHV]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]);
397 0 : }
398 0 : else if (j<kNHV*4){
399 0 : fHVin[j-3*kNHV]->SetDelta(kk,delta[kk]);
400 0 : fHVin[j-3*kNHV]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]);
401 0 : }
402 : }
403 0 : }
404 :
405 0 : fIsProcessed=kTRUE;
406 :
407 0 : return kTRUE;
408 0 : }
409 :
410 : //---------------------------------------------------------------
411 : void AliTOFDataDCS::Init(){
412 :
413 : // initialization of aliases and DCS data
414 :
415 0 : TString sindex;
416 0 : for(int i=0;i<kNAliases;i++){
417 : //HV, v
418 0 : if (i<kNHV){
419 0 : fAliasNames[i] = "tof_hv_vp_";
420 0 : sindex.Form("%02i",i);
421 0 : fAliasNames[i] += sindex;
422 0 : fHVvp[i] = new AliTOFFormatDCS();
423 0 : }
424 0 : else if (i<kNHV*2){
425 0 : fAliasNames[i] = "tof_hv_vn_";
426 0 : sindex.Form("%02i",i-kNHV);
427 0 : fAliasNames[i] += sindex;
428 0 : fHVvn[i-kNHV] = new AliTOFFormatDCS();
429 0 : }
430 : //HV, i
431 0 : else if (i<kNHV*3){
432 0 : fAliasNames[i] = "tof_hv_ip_";
433 0 : sindex.Form("%02i",i-2*kNHV);
434 0 : fAliasNames[i] += sindex;
435 0 : fHVip[i-2*kNHV] = new AliTOFFormatDCS();
436 0 : }
437 0 : else if (i<kNHV*4){
438 0 : fAliasNames[i] = "tof_hv_in_";
439 0 : sindex.Form("%02i",i-3*kNHV);
440 0 : fAliasNames[i] += sindex;
441 0 : fHVin[i-3*kNHV] = new AliTOFFormatDCS();
442 0 : }
443 : }
444 0 : }
445 :
446 :
447 : //---------------------------------------------------------------
448 : void AliTOFDataDCS::Introduce(UInt_t numAlias, const TObjArray* aliasArr)const
449 : {
450 :
451 : // method to introduce new aliases
452 :
453 : int entries=0;
454 0 : entries = aliasArr->GetEntries();
455 : int nal=0;
456 : nal=numAlias;
457 0 : AliDebug(2,Form("************ Alias: %s **********",fAliasNames[numAlias].Data()));
458 0 : AliDebug(2,Form(" %d DP values collected",entries));
459 :
460 0 : }
461 :
462 : //---------------------------------------------------------------
463 : void AliTOFDataDCS::Draw(const Option_t* /*option*/)
464 : {
465 : // Draw all histos and graphs
466 :
467 0 : if(!fIsProcessed) return;
468 :
469 : TCanvas *ch;
470 0 : TString canvasHistoName="Histos";
471 0 : ch=new TCanvas(canvasHistoName,canvasHistoName,20,20,600,600);
472 0 : ch->cd();
473 :
474 : // to be implemented
475 :
476 0 : }
477 :
|