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 **************************************************************************/
17 $Log: AliTOFLvHvDataPoints.cxx,v $
20 // AliTOFLvHvDataPoints class
21 // main aim to introduce the aliases for the TOF LV and HV DCS
22 // data points to be then
23 // stored in the OCDB, and to process them.
24 // Process() method called by TOF preprocessor
27 #include "TTimeStamp.h"
32 #include "AliDCSValue.h"
34 #include "AliBitPacking.h"
36 #include "AliTOFGeometry.h"
37 #include "AliTOFDCSmaps.h"
38 #include "AliTOFLvHvDataPoints.h"
43 ClassImp(AliTOFLvHvDataPoints)
45 //---------------------------------------------------------------
46 AliTOFLvHvDataPoints::AliTOFLvHvDataPoints():
51 fStartTimeDCSQuery(0),
55 fNumberOfLVdataPoints(0),
56 fNumberOfHVdataPoints(0),
57 fNumberOfHVandLVmaps(0),
66 //---------------------------------------------------------------
67 AliTOFLvHvDataPoints::AliTOFLvHvDataPoints(Int_t nRun, UInt_t startTime, UInt_t endTime, UInt_t startTimeDCSQuery, UInt_t endTimeDCSQuery):
70 fStartTime(startTime),
72 fStartTimeDCSQuery(startTimeDCSQuery),
73 fEndTimeDCSQuery(endTimeDCSQuery),
76 fNumberOfLVdataPoints(0),
77 fNumberOfHVdataPoints(0),
78 fNumberOfHVandLVmaps(0),
79 fStartingLVmap(new AliTOFDCSmaps()),
80 fStartingHVmap(new AliTOFDCSmaps()),
81 fHisto(new TH1C("histo","",kNpads,-0.5,kNpads-0.5))
84 // constructor with arguments
86 AliInfo(Form("\n\tRun %d \n\tStartTime %s \n\tEndTime %s \n\tStartTime DCS Query %s \n\tEndTime DCS Query %s", nRun,
87 TTimeStamp(startTime).AsString(),
88 TTimeStamp(endTime).AsString(),
89 TTimeStamp(startTimeDCSQuery).AsString(),
90 TTimeStamp(endTimeDCSQuery).AsString()));
96 //---------------------------------------------------------------
98 AliTOFLvHvDataPoints::AliTOFLvHvDataPoints(const AliTOFLvHvDataPoints & data):
101 fStartTime(data.fStartTime),
102 fEndTime(data.fEndTime),
103 fStartTimeDCSQuery(data.fStartTimeDCSQuery),
104 fEndTimeDCSQuery(data.fEndTimeDCSQuery),
105 fIsProcessed(data.fIsProcessed),
107 fNumberOfLVdataPoints(data.fNumberOfLVdataPoints),
108 fNumberOfHVdataPoints(data.fNumberOfHVdataPoints),
109 fNumberOfHVandLVmaps(data.fNumberOfHVandLVmaps),
110 fStartingLVmap(data.fStartingLVmap),
111 fStartingHVmap(data.fStartingHVmap),
117 for(int i=0;i<kNddl;i++)
118 fAliasNamesXLVmap[i]=data.fAliasNamesXLVmap[i];
120 for(int i=0;i<kNsectors;i++)
121 for(int j=0;j<kNplates;j++)
122 fAliasNamesXHVmap[i][j]=data.fAliasNamesXHVmap[i][j];
125 //---------------------------------------------------------------
127 AliTOFLvHvDataPoints& AliTOFLvHvDataPoints:: operator=(const AliTOFLvHvDataPoints & data) {
129 // assignment operator
134 TObject::operator=(data);
136 fStartTime=data.GetStartTime();
137 fEndTime=data.GetEndTime();
138 fStartTimeDCSQuery=data.GetStartTimeDCSQuery();
139 fEndTimeDCSQuery=data.GetEndTimeDCSQuery();
141 fNumberOfLVdataPoints=data.fNumberOfLVdataPoints;
142 fNumberOfHVdataPoints=data.fNumberOfHVdataPoints;
143 fNumberOfHVandLVmaps=data.fNumberOfHVandLVmaps;
145 fStartingLVmap=data.fStartingLVmap;
146 fStartingHVmap=data.fStartingHVmap;
148 for(int i=0;i<kNddl;i++)
149 fAliasNamesXLVmap[i]=data.fAliasNamesXLVmap[i];
151 for(int i=0;i<kNsectors;i++)
152 for(int j=0;j<kNplates;j++)
153 fAliasNamesXHVmap[i][j]=data.fAliasNamesXHVmap[i][j];
159 //---------------------------------------------------------------
160 AliTOFLvHvDataPoints::~AliTOFLvHvDataPoints() {
164 delete fStartingLVmap;
165 delete fStartingHVmap;
169 //---------------------------------------------------------------
170 Bool_t AliTOFLvHvDataPoints::ProcessData(TMap& aliasMap) {
172 // method to process the data
175 if(!(fAliasNamesXHVmap[0][0]) || !(fAliasNamesXLVmap[0])) Init();
177 AliInfo(Form(" Start Time = %i",fStartTime));
178 AliInfo(Form(" End Time = %i",fEndTime));
179 AliInfo(Form(" Start Time DCS Query= %i",fStartTimeDCSQuery));
180 AliInfo(Form(" End Time DCS Query= %i",fEndTimeDCSQuery));
182 if (fEndTime==fStartTime){
183 AliError(Form(" Run with null time length: start time = %d = end time = %d",fStartTime,fEndTime));
188 if (!ReadLVDataPoints(aliasMap)) return kFALSE;
189 AliDebug(1,Form(" Number of LV dp value changes = %d",fNumberOfLVdataPoints));
191 if (!ReadHVDataPoints(aliasMap)) return kFALSE;
192 AliDebug(1,Form(" Number of HV dp value changes = %d",fNumberOfHVdataPoints));
194 if (!MergeLVmap()) return kFALSE;
196 if (!MergeHVmap()) return kFALSE;
198 if (!MergeMaps()) return kFALSE;
206 //---------------------------------------------------------------
207 Bool_t AliTOFLvHvDataPoints::MergeMaps() {
209 // Merge together LV and HV maps
212 Int_t timeMaps[kNmaxDataPoints];
213 for (Int_t ii=0; ii<kNmaxDataPoints; ii++) timeMaps[ii]=0;
215 for (Int_t ii=0; ii<fNumberOfHVdataPoints; ii++) {
216 timeMaps[fNumberOfHVandLVmaps++]=fHVDataPoints[ii]->GetTime();
217 //timeMaps[fNumberOfHVandLVmaps]=fHVDataPoints[ii]->GetTime();
218 //fNumberOfHVandLVmaps++;
221 Bool_t check = kTRUE;
222 for (Int_t jj=0; jj<fNumberOfLVdataPoints; jj++) {
224 for (Int_t ii=0; ii<fNumberOfHVdataPoints; ii++)
225 check=check&&(fLVDataPoints[jj]->GetTime()!=timeMaps[ii]);
228 timeMaps[fNumberOfHVandLVmaps++]=fLVDataPoints[jj]->GetTime();
229 //timeMaps[fNumberOfHVandLVmaps]=fLVDataPoints[jj]->GetTime();
230 //fNumberOfHVandLVmaps++;
234 AliInfo(Form(" TOF HV dps = %d; TOF LV dps = %d; TOF HVandLV dps %d",
235 fNumberOfHVdataPoints, fNumberOfLVdataPoints, fNumberOfHVandLVmaps));
238 Int_t controller[kNmaxDataPoints];
239 for (Int_t ii=0; ii<kNmaxDataPoints; ii++) controller[ii]=-1;
240 TMath::Sort(fNumberOfHVandLVmaps,timeMaps,controller,kFALSE); // increasing order
242 //for (Int_t ii=0; ii<fNumberOfHVandLVmaps; ii++)
243 //AliDebug(3,Form(" time[%d] = %d", controller[ii],timeMaps[controller[ii]]));
245 Short_t array[kNpads];
246 for (Int_t iPad=0; iPad<kNpads; iPad++) array[iPad]=-1;
249 // HVandLV status map during run
250 for (Int_t index=0; index<fNumberOfHVandLVmaps; index++) {
251 time = timeMaps[controller[index]];
252 AliDebug(2,Form(" time[%d] = %d ", controller[index],time));
254 for (Int_t ii=0,jj=0; ii<fNumberOfHVdataPoints && jj<fNumberOfLVdataPoints; ii++,jj++) {
256 if ( (fHVDataPoints[ii]->GetTime()==time && fLVDataPoints[jj]->GetTime()<=time) ||
257 (fLVDataPoints[jj]->GetTime()==time && fHVDataPoints[ii]->GetTime()<=time) ) {
259 AliDebug(2,Form(" HVdp_time[%d]=%d, LVdp_time[%d]=%d",
260 ii,fHVDataPoints[ii]->GetTime(),
261 jj,fLVDataPoints[jj]->GetTime()));
262 for (Int_t iPad=0; iPad<kNpads; iPad++)
263 array[iPad] = fHVDataPoints[ii]->GetCellValue(iPad)*fLVDataPoints[jj]->GetCellValue(iPad);
264 AliTOFDCSmaps *object = new AliTOFDCSmaps(time,array);
269 else if ( fHVDataPoints[ii]->GetTime()==time && fLVDataPoints[jj]->GetTime()>time ) {
271 AliDebug(2,Form(" HVdp_time[%d]=%d, (no LVdp)",ii,fHVDataPoints[ii]->GetTime()));
272 for (Int_t iPad=0; iPad<kNpads; iPad++)
273 array[iPad] = fHVDataPoints[ii]->GetCellValue(iPad);
274 AliTOFDCSmaps *object = new AliTOFDCSmaps(time,array);
278 } else if ( fLVDataPoints[jj]->GetTime()==time && fHVDataPoints[ii]->GetTime()>time ) {
280 AliDebug(2,Form(" LVdp_time[%d]=%d, (no HVdp)",jj,fLVDataPoints[jj]->GetTime()));
281 for (Int_t iPad=0; iPad<kNpads; iPad++)
282 array[iPad] = fLVDataPoints[jj]->GetCellValue(iPad);
283 AliTOFDCSmaps *object = new AliTOFDCSmaps(time,array);
297 //---------------------------------------------------------------
298 Bool_t AliTOFLvHvDataPoints::MergeHVmap() {
300 // Create HV maps from HV dps
303 Bool_t check= kFALSE;
305 if (fNumberOfHVdataPoints==0)
309 // first map construction
310 for (Int_t iPad=0; iPad<kNpads; iPad++) {
311 if (fHVDataPoints[0]->GetCellValue(iPad)==-1)
312 fHVDataPoints[0]->SetCellValue(iPad,fStartingHVmap->GetCellValue(iPad));
314 //fHVDataPoints[0]->SetCellValue(iPad,fHVDataPoints[0]->GetCellValue(iPad)*fStartingHVmap->GetCellValue(iPad));
317 AliDebug(2,Form("HVdp0: channel=%6d -> %1d",iPad,fHVDataPoints[0]->GetCellValue(iPad)));
320 // other maps construction
321 for (Int_t ii=1; ii<fNumberOfHVdataPoints; ii++) {
322 for (Int_t iPad=0; iPad<kNpads; iPad++) {
323 if (fHVDataPoints[ii]->GetCellValue(iPad)==-1)
324 fHVDataPoints[ii]->SetCellValue(iPad,fHVDataPoints[ii-1]->GetCellValue(iPad));
327 AliDebug(2,Form("HVdp%d: channel=%6d -> %1d",ii,iPad,fHVDataPoints[ii]->GetCellValue(iPad)));
338 //---------------------------------------------------------------
339 Bool_t AliTOFLvHvDataPoints::MergeLVmap() {
341 // Create LV maps from LV dps
344 Bool_t check= kFALSE;
346 if (fNumberOfLVdataPoints==0)
350 // first map construction
351 for (Int_t iPad=0; iPad<kNpads; iPad++) {
352 if (fLVDataPoints[0]->GetCellValue(iPad)==-1)
353 fLVDataPoints[0]->SetCellValue(iPad,fStartingLVmap->GetCellValue(iPad));
355 //fLVDataPoints[0]->SetCellValue(iPad,fLVDataPoints[0]->GetCellValue(iPad)*fStartingLVmap->GetCellValue(iPad));
358 AliDebug(2,Form("LVdp0: channel=%6d -> %1d",iPad,fLVDataPoints[0]->GetCellValue(iPad)));
361 // other maps construction
362 for (Int_t ii=1; ii<fNumberOfLVdataPoints; ii++) {
363 for (Int_t iPad=0; iPad<kNpads; iPad++) {
364 if (fLVDataPoints[ii]->GetCellValue(iPad)==-1)
365 fLVDataPoints[ii]->SetCellValue(iPad,fLVDataPoints[ii-1]->GetCellValue(iPad));
368 AliDebug(2,Form("LVdp%d: channel=%6d -> %1d",ii,iPad,fLVDataPoints[ii]->GetCellValue(iPad)));
379 //---------------------------------------------------------------
380 Bool_t AliTOFLvHvDataPoints::ReadHVDataPoints(TMap& aliasMap) {
387 AliDCSValue* aValuePrev;
392 Short_t dummy[kNpads];
394 for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
395 // starting loop on aliases
396 for (int i=0; i<kNsectors; i++)
397 for (int j=0; j<kNplates; j++) {
398 aliasArr = (TObjArray*) aliasMap.GetValue(fAliasNamesXHVmap[i][j].Data());
400 AliError(Form("Alias %s not found!", fAliasNamesXHVmap[i][j].Data()));
402 return kFALSE; // returning only in case we are not in a FDR run
407 nEntries = aliasArr->GetEntries();
409 if (nEntries<2) AliDebug(1, Form(" NB: number of values for dp %s %d (less than 2)",fAliasNamesXHVmap[i][j].Data(),nEntries));
412 AliError(Form("Alias %s has no entries! Nothing will be stored",
413 fAliasNamesXHVmap[i][j].Data()));
418 // read the first value
419 for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
420 aValue = (AliDCSValue*) aliasArr->At(0);
421 val = aValue->GetInt();
422 time = aValue->GetTimeStamp();
423 AliDebug(1, Form(" at t=%d, 1st value for dp %s = %d", time, fAliasNamesXHVmap[i][j].Data(), val));
424 FillHVarrayPerDataPoint(i,j,val,dummy);
425 AliTOFDCSmaps *object0 = new AliTOFDCSmaps(time,dummy);
426 if (InsertHVDataPoint(object0)!=0) return kTRUE; // to be verified
428 // read the values from the second one
429 for (Int_t iEntry=1; iEntry<nEntries; iEntry++) {
430 for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
431 aValue = (AliDCSValue*) aliasArr->At(iEntry);
432 val = aValue->GetInt();
433 time = aValue->GetTimeStamp();
434 AliDebug(1, Form(" at t=%d, %dth value for dp %s = %d", time, iEntry+1, fAliasNamesXHVmap[i][j].Data(), val));
435 aValuePrev = (AliDCSValue*) aliasArr->At(iEntry-1);
436 if (aValuePrev->GetInt()!=val) {
437 FillHVarrayPerDataPoint(i,j,val,dummy);
438 AliTOFDCSmaps *object = new AliTOFDCSmaps(time,dummy);
439 if (InsertHVDataPoint(object)!=0) return kTRUE; // to be verified
446 if (fNumberOfHVdataPoints==0) {
447 AliInfo("Valid HV dps not found. By default all HV TOF channels (except the ones in the PHOS holes) switched ON, at SOR.");
448 if (InsertHVDataPoint(fStartingHVmap)!=0) return kTRUE; // to be verified
450 AliTOFDCSmaps *object = new AliTOFDCSmaps((Int_t)(TMath::Power(2,31)-1),fStartingHVmap->GetArray());
451 if (InsertHVDataPoint(object)!=0) return kTRUE; // to be verified
455 else if (fNumberOfHVdataPoints==1) {
456 AliInfo(Form("Only one valid HV dp found (time=%d). This dp will be replicated at EOR (%d).",fHVDataPoints[0]->GetTime(),fEndTimeDCSQuery));
457 AliTOFDCSmaps *object = new AliTOFDCSmaps((Int_t)(TMath::Power(2,31)-1),fHVDataPoints[0]->GetArray());
458 if (InsertHVDataPoint(object)!=0) return kTRUE; // to be verified
465 //---------------------------------------------------------------
466 Bool_t AliTOFLvHvDataPoints::ReadLVDataPoints(TMap& aliasMap) {
473 AliDCSValue* aValuePrev;
478 Short_t dummy[kNpads];
480 for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
481 // starting loop on aliases
482 for (int i=0; i<kNddl; i++) {
483 aliasArr = (TObjArray*) aliasMap.GetValue(fAliasNamesXLVmap[i].Data());
485 AliError(Form("Alias %s not found!", fAliasNamesXLVmap[i].Data()));
487 return kFALSE; // returning only in case we are not in a FDR run
492 nEntries = aliasArr->GetEntries();
494 if (nEntries<2) AliDebug(1, Form(" NB: number of values for dp %s %d (less than 2)",fAliasNamesXLVmap[i].Data(),nEntries));
497 AliError(Form("Alias %s has no entries! Nothing will be stored",
498 fAliasNamesXLVmap[i].Data()));
503 // read the first value
504 for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
505 aValue = (AliDCSValue*) aliasArr->At(0);
506 val = aValue->GetInt();
507 time = aValue->GetTimeStamp();
508 AliDebug(1, Form(" at t=%d,1st value for dp %s = %d", time, fAliasNamesXLVmap[i].Data(), val));
509 FillLVarrayPerDataPoint(i,val,dummy);
510 AliTOFDCSmaps *object0 = new AliTOFDCSmaps(time,dummy);
511 if (InsertLVDataPoint(object0)!=0) return kTRUE; // to be verified
513 // read the values from the second one
514 for (Int_t iEntry=1; iEntry<nEntries; iEntry++) {
515 for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
516 aValue = (AliDCSValue*) aliasArr->At(iEntry);
517 val = aValue->GetInt();
518 time = aValue->GetTimeStamp();
519 AliDebug(1, Form(" at t=%d,%dth value for dp %s = %d", time, iEntry+1, fAliasNamesXLVmap[i].Data(), val));
520 aValuePrev = (AliDCSValue*) aliasArr->At(iEntry-1);
521 if (aValuePrev->GetInt()!=val) {
522 FillLVarrayPerDataPoint(i,val,dummy);
523 AliTOFDCSmaps *object = new AliTOFDCSmaps(time,dummy);
524 if (InsertLVDataPoint(object)!=0) return kTRUE; // to be verified
531 if (fNumberOfLVdataPoints==0) {
532 AliInfo("Valid LV dps not found. By default all LV TOF channels switched ON, at SOR.");
533 if (InsertLVDataPoint(fStartingLVmap)!=0) return kTRUE; // to be verified
535 AliTOFDCSmaps *object = new AliTOFDCSmaps((Int_t)(TMath::Power(2,31)-1),fStartingHVmap->GetArray());
536 if (InsertLVDataPoint(object)!=0) return kTRUE; // to be verified
540 else if (fNumberOfLVdataPoints==1) {
541 AliInfo(Form("Only one valid LV dp found (time=%d). This dp will be replicated at EOR (%d).",fLVDataPoints[0]->GetTime(),fEndTimeDCSQuery));
542 AliTOFDCSmaps *object = new AliTOFDCSmaps((Int_t)(TMath::Power(2,31)-1),fLVDataPoints[0]->GetArray());
543 if (InsertLVDataPoint(object)!=0) return kTRUE; // to be verified
550 //---------------------------------------------------------------
551 Int_t AliTOFLvHvDataPoints::InsertHVDataPoint(AliTOFDCSmaps *object)
554 // Insert HV dp in the HV dps array.
555 // The HV dps array is sorted according to increasing dp timeStamp value
558 if (fNumberOfHVdataPoints==kNmaxDataPoints) {
559 AliError("Too many HV data points!");
563 if (fNumberOfHVdataPoints==0) {
564 fHVDataPoints[fNumberOfHVdataPoints++] = object;
568 for (Int_t index=0; index<fNumberOfHVdataPoints; index++) {
569 if (object->GetTime()==fHVDataPoints[index]->GetTime()) {
570 fHVDataPoints[index]->Update(object);
575 Int_t ii = FindHVdpIndex(object->GetTime());
576 memmove(fHVDataPoints+ii+1 ,fHVDataPoints+ii,(fNumberOfHVdataPoints-ii)*sizeof(AliTOFDCSmaps*));
577 fHVDataPoints[ii] = object;
578 fNumberOfHVdataPoints++;
584 //_________________________________________________________________________
585 Int_t AliTOFLvHvDataPoints::FindHVdpIndex(Int_t z) const {
587 // This function returns the index of the nearest HV DP in time
590 if (fNumberOfHVdataPoints==0) return 0;
591 if (z <= fHVDataPoints[0]->GetTime()) return 0;
592 if (z > fHVDataPoints[fNumberOfHVdataPoints-1]->GetTime()) return fNumberOfHVdataPoints;
593 Int_t b = 0, e = fNumberOfHVdataPoints-1, m = (b+e)/2;
594 for (; b<e; m=(b+e)/2) {
595 if (z > fHVDataPoints[m]->GetTime()) b=m+1;
603 //---------------------------------------------------------------
604 Int_t AliTOFLvHvDataPoints::InsertLVDataPoint(AliTOFDCSmaps *object)
607 // Insert LV dp in the LV dps array.
608 // The LV dps array is sorted according to increasing dp timeStamp value
611 if (fNumberOfLVdataPoints==kNmaxDataPoints) {
612 AliError("Too many LV data points!");
616 if (fNumberOfLVdataPoints==0) {
617 fLVDataPoints[fNumberOfLVdataPoints++] = object;
621 for (Int_t index=0; index<fNumberOfLVdataPoints; index++) {
622 if (object->GetTime()==fLVDataPoints[index]->GetTime()) {
623 fLVDataPoints[index]->Update(object);
628 Int_t ii = FindLVdpIndex(object->GetTime());
629 memmove(fLVDataPoints+ii+1 ,fLVDataPoints+ii,(fNumberOfLVdataPoints-ii)*sizeof(AliTOFDCSmaps*));
630 fLVDataPoints[ii] = object;
631 fNumberOfLVdataPoints++;
637 //_________________________________________________________________________
638 Int_t AliTOFLvHvDataPoints::FindLVdpIndex(Int_t z) const {
640 // This function returns the index of the nearest LV DP in time
643 if (fNumberOfLVdataPoints==0) return 0;
644 if (z <= fLVDataPoints[0]->GetTime()) return 0;
645 if (z > fLVDataPoints[fNumberOfLVdataPoints-1]->GetTime()) return fNumberOfLVdataPoints;
646 Int_t b = 0, e = fNumberOfLVdataPoints-1, m = (b+e)/2;
647 for (; b<e; m=(b+e)/2) {
648 if (z > fLVDataPoints[m]->GetTime()) b=m+1;
656 //---------------------------------------------------------------
657 void AliTOFLvHvDataPoints::Init(){
659 // Initialize aliases and DCS data
663 for(int i=0;i<kNsectors;i++)
664 for(int j=0;j<kNplates;j++) {
665 fAliasNamesXHVmap[i][j] = "TOF_HVSTATUS_";
666 sindex.Form("SM%02dMOD%1d",i,j);
667 fAliasNamesXHVmap[i][j] += sindex;
671 for(int i=0;i<kNddl;i++) {
672 fAliasNamesXLVmap[i] = "TOF_FEACSTATUS_";
673 sindex.Form("%02d",i);
674 fAliasNamesXLVmap[i] += sindex;
677 fStartingLVmap->SetTime(0);
678 for (Int_t iPad=0; iPad<kNpads; iPad++)
679 fStartingLVmap->SetCellValue(iPad,1);
681 fStartingHVmap->SetTime(0);
682 for (Int_t iPad=0; iPad<kNpads; iPad++) {
683 Int_t vol[5] = {-1,-1,-1,-1,-1};
684 AliTOFGeometry::GetVolumeIndices(iPad,vol);
685 if ( (vol[0]==13 || vol[0]==14 || vol[0]==15) &&
687 fStartingHVmap->SetCellValue(iPad,0);
689 fStartingHVmap->SetCellValue(iPad,1);
694 //---------------------------------------------------------------
695 void AliTOFLvHvDataPoints::FillHVarrayPerDataPoint(Int_t sector, Int_t plate, UInt_t baseWord, Short_t *array) const
698 // Set the status of the TOF pads connected to the HV dp
699 // labelled by sector and plate numbers
702 Int_t det[5] = {sector, plate, -1, -1, -1};
707 for (Int_t iStrip=0; iStrip<AliTOFGeometry::NStrip(plate); iStrip++) {
708 checkBit = AliBitPacking::UnpackWord(baseWord,iStrip,iStrip);
709 for (Int_t iPadZ=0; iPadZ<AliTOFGeometry::NpadZ(); iPadZ++)
710 for (Int_t iPadX=0; iPadX<AliTOFGeometry::NpadX(); iPadX++) {
714 channel = AliTOFGeometry::GetIndex(det);
715 array[channel]=checkBit;
722 //---------------------------------------------------------------
723 void AliTOFLvHvDataPoints::FillLVarrayPerDataPoint(Int_t nDDL, UInt_t baseWord, Short_t *array) const
726 // Set the status of the TOF pads connected to the LV dp
727 // labelled by TOF crate number
730 Int_t det[5] = {nDDL/4, -1, -1, -1, -1};
733 Int_t iStripXsm[6] = {-1,-1,-1,-1,-1,-1};
734 Int_t firstPadX = -1;
741 for (Int_t nFEAC=0; nFEAC<8; nFEAC++) {
742 checkBit = AliBitPacking::UnpackWord(baseWord,nFEAC,nFEAC);
745 GetStripsConnectedToFEAC(nDDL, nFEAC, iStripXsm, firstPadX,lastPadX);
746 for (Int_t index=0; index<6; index++) {
747 if (iStripXsm[index]==-1) continue;
749 for (Int_t iPadZ=0; iPadZ<AliTOFGeometry::NpadZ(); iPadZ++)
750 for (Int_t iPadX=firstPadX; iPadX<=lastPadX; iPadX++) {
751 AliTOFGeometry::GetStripAndModule(iStripXsm[index],plate,strip);
756 channel = AliTOFGeometry::GetIndex(det);
757 array[channel]=checkBit;
765 //---------------------------------------------------------------
766 void AliTOFLvHvDataPoints::GetStripsConnectedToFEAC(Int_t nDDL, Int_t nFEAC, Int_t *iStrip, Int_t &firstPadX, Int_t &lastPadX) const
769 // FEAC-strip mapping:
770 // return the strips and first PadX numbers
771 // connected to the FEAC number nFEAC in the crate number nDDL
774 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=-1;
776 if (nDDL<0 || nDDL>=kNddl || nFEAC<0 || nFEAC>=8) return;
781 lastPadX = AliTOFGeometry::NpadX()/2-1;
784 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=ii+6*nFEAC;
786 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=ii+6*nFEAC;
788 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=ii+6*nFEAC-1;
790 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=ii+6*nFEAC-1;
792 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=ii+6*nFEAC-2;
794 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=ii+6*nFEAC-2;
798 firstPadX = AliTOFGeometry::NpadX()/2;
799 lastPadX = AliTOFGeometry::NpadX()-1;
802 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=ii+6*nFEAC;
804 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=ii+6*nFEAC;
806 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=ii+6*nFEAC-1;
808 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=ii+6*nFEAC-1;
810 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=ii+6*nFEAC-1;
812 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=ii+6*nFEAC-2;
816 firstPadX = AliTOFGeometry::NpadX()/2;
817 lastPadX = AliTOFGeometry::NpadX()-1;
820 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=90-(ii+6*nFEAC);
822 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=90-(ii+6*nFEAC);
824 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=90-(ii+6*nFEAC-1);
826 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=90-(ii+6*nFEAC-1);
828 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=90-(ii+6*nFEAC-2);
830 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=90-(ii+6*nFEAC-2);
835 lastPadX = AliTOFGeometry::NpadX()/2-1;
838 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=90-(ii+6*nFEAC);
840 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=90-(ii+6*nFEAC);
842 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=90-(ii+6*nFEAC-1);
844 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=90-(ii+6*nFEAC-1);
846 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=90-(ii+6*nFEAC-1);
848 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=90-(ii+6*nFEAC-2);
855 //---------------------------------------------------------------
856 void AliTOFLvHvDataPoints::Draw(const Option_t* /*option*/)
859 // Draw all histos and graphs
862 if(!fIsProcessed) return;
865 TString canvasHistoName="Histos";
866 ch = new TCanvas(canvasHistoName,canvasHistoName,20,20,600,600);
874 //---------------------------------------------------------------
875 void AliTOFLvHvDataPoints::DrawHVandLVMap(Int_t index)
878 // Draw HV+LV map labelled as index
881 if(!fIsProcessed) return;
883 if (index>=fNumberOfHVandLVmaps) return;
885 AliTOFDCSmaps *mappa=(AliTOFDCSmaps*)GetHVandLVmap(index);
888 if (index==0) sprintf(title,"HVandLV map at time %d (%dst map)",mappa->GetTime(),index+1);
889 else if (index==1) sprintf(title,"HVandLV map at time %d (%dnd map)",mappa->GetTime(),index+1);
890 else if (index==2) sprintf(title,"HVandLV map at time %d (%drd map)",mappa->GetTime(),index+1);
891 else if (index>=3) sprintf(title,"HVandLV map at time %d (%dth map)",mappa->GetTime(),index+1);
893 fHisto = new TH1C("histo","",kNpads,-0.5,kNpads-0.5);
895 fHisto->SetTitle(title);
897 for (Int_t ii=0; ii<kNpads; ii++)
898 fHisto->SetBinContent(ii+1,mappa->GetCellValue(ii));
904 //---------------------------------------------------------------
905 void AliTOFLvHvDataPoints::DrawLVMap(Int_t index)
908 // Draw LV map labelled as index
911 if(!fIsProcessed) return;
913 if (index>=fNumberOfLVdataPoints) return;
915 AliTOFDCSmaps *mappa=(AliTOFDCSmaps*)GetLVmap(index);
918 if (index==0) sprintf(title,"LV map at time %d (%dst map)",mappa->GetTime(),index+1);
919 else if (index==1) sprintf(title,"LV map at time %d (%dnd map)",mappa->GetTime(),index+1);
920 else if (index==2) sprintf(title,"LV map at time %d (%drd map)",mappa->GetTime(),index+1);
921 else if (index>=3) sprintf(title,"LV map at time %d (%dth map)",mappa->GetTime(),index+1);
923 fHisto = new TH1C("histo","",kNpads,-0.5,kNpads-0.5);
925 fHisto->SetTitle(title);
927 for (Int_t ii=0; ii<kNpads; ii++)
928 fHisto->SetBinContent(ii+1,mappa->GetCellValue(ii));
934 //---------------------------------------------------------------
935 void AliTOFLvHvDataPoints::DrawHVMap(Int_t index)
938 // Draw HV map labelled as index
941 if(!fIsProcessed) return;
943 if (index>=fNumberOfHVdataPoints) return;
945 AliTOFDCSmaps *mappa=(AliTOFDCSmaps*)GetHVmap(index);
948 if (index==0) sprintf(title,"HV map at time %d (%dst map)",mappa->GetTime(),index+1);
949 else if (index==1) sprintf(title,"HV map at time %d (%dnd map)",mappa->GetTime(),index+1);
950 else if (index==2) sprintf(title,"HV map at time %d (%drd map)",mappa->GetTime(),index+1);
951 else if (index>=3) sprintf(title,"HV map at time %d (%dth map)",mappa->GetTime(),index+1);
953 fHisto = new TH1C("histo","",kNpads,-0.5,kNpads-0.5);
955 fHisto->SetTitle(title);
957 for (Int_t ii=0; ii<kNpads; ii++)
958 fHisto->SetBinContent(ii+1,mappa->GetCellValue(ii));
964 //---------------------------------------------------------------
965 AliTOFDCSmaps *AliTOFLvHvDataPoints::GetHVandLVmapAtEOR()
968 // Returns HVandLV status map at EOR.
969 // If the end-of-run has been caused by TOF self,
970 // the last but two value of HVandLV status map
971 // will be taken into account.
972 // This last condition is true
973 // if the time interval between the second-last DP and the last one
977 AliTOFDCSmaps * lvANDhvMap = 0;
979 if (fNumberOfHVandLVmaps<=2) { // nothing changed during the run
981 lvANDhvMap = fMap[fNumberOfHVandLVmaps-1];
986 if (fMap[fNumberOfHVandLVmaps-1]->GetTime()-fMap[fNumberOfHVandLVmaps-2]->GetTime()<=60)
987 lvANDhvMap = (AliTOFDCSmaps*)fMap[fNumberOfHVandLVmaps-3];
989 lvANDhvMap = (AliTOFDCSmaps*)fMap[fNumberOfHVandLVmaps-1];