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"
31 #include "AliDCSValue.h"
33 #include "AliBitPacking.h"
35 #include "AliTOFLvHvDataPoints.h"
36 #include "AliTOFGeometry.h"
41 ClassImp(AliTOFLvHvDataPoints)
43 //---------------------------------------------------------------
44 AliTOFLvHvDataPoints::AliTOFLvHvDataPoints():
49 fStartTimeDCSQuery(0),
53 fNumberOfLVdataPoints(0),
54 fNumberOfHVdataPoints(0),
55 fNumberOfHVandLVmaps(0),
62 //---------------------------------------------------------------
63 AliTOFLvHvDataPoints::AliTOFLvHvDataPoints(Int_t nRun, UInt_t startTime, UInt_t endTime, UInt_t startTimeDCSQuery, UInt_t endTimeDCSQuery):
66 fStartTime(startTime),
68 fStartTimeDCSQuery(startTimeDCSQuery),
69 fEndTimeDCSQuery(endTimeDCSQuery),
72 fNumberOfLVdataPoints(0),
73 fNumberOfHVdataPoints(0),
74 fNumberOfHVandLVmaps(0),
75 fHisto(new TH1C("histo","",kNpads,-0.5,kNpads-0.5))
78 // constructor with arguments
80 AliInfo(Form("\n\tRun %d \n\tStartTime %s \n\tEndTime %s \n\tStartTime DCS Query %s \n\tEndTime DCS Query %s", nRun,
81 TTimeStamp(startTime).AsString(),
82 TTimeStamp(endTime).AsString(),
83 TTimeStamp(startTimeDCSQuery).AsString(),
84 TTimeStamp(endTimeDCSQuery).AsString()));
90 //---------------------------------------------------------------
92 AliTOFLvHvDataPoints::AliTOFLvHvDataPoints(const AliTOFLvHvDataPoints & data):
95 fStartTime(data.fStartTime),
96 fEndTime(data.fEndTime),
97 fStartTimeDCSQuery(data.fStartTimeDCSQuery),
98 fEndTimeDCSQuery(data.fEndTimeDCSQuery),
99 fIsProcessed(data.fIsProcessed),
101 fNumberOfLVdataPoints(data.fNumberOfLVdataPoints),
102 fNumberOfHVdataPoints(data.fNumberOfHVdataPoints),
103 fNumberOfHVandLVmaps(data.fNumberOfHVandLVmaps),
109 for(int i=0;i<kNddl;i++)
110 fAliasNamesXLVmap[i]=data.fAliasNamesXLVmap[i];
112 for(int i=0;i<kNsectors;i++)
113 for(int j=0;j<kNplates;j++)
114 fAliasNamesXHVmap[i][j]=data.fAliasNamesXHVmap[i][j];
117 //---------------------------------------------------------------
119 AliTOFLvHvDataPoints& AliTOFLvHvDataPoints:: operator=(const AliTOFLvHvDataPoints & data) {
121 // assignment operator
126 TObject::operator=(data);
128 fStartTime=data.GetStartTime();
129 fEndTime=data.GetEndTime();
130 fStartTimeDCSQuery=data.GetStartTimeDCSQuery();
131 fEndTimeDCSQuery=data.GetEndTimeDCSQuery();
133 fNumberOfLVdataPoints=data.fNumberOfLVdataPoints;
134 fNumberOfHVdataPoints=data.fNumberOfHVdataPoints;
135 fNumberOfHVandLVmaps=data.fNumberOfHVandLVmaps;
137 for(int i=0;i<kNddl;i++)
138 fAliasNamesXLVmap[i]=data.fAliasNamesXLVmap[i];
140 for(int i=0;i<kNsectors;i++)
141 for(int j=0;j<kNplates;j++)
142 fAliasNamesXHVmap[i][j]=data.fAliasNamesXHVmap[i][j];
148 //---------------------------------------------------------------
149 AliTOFLvHvDataPoints::~AliTOFLvHvDataPoints() {
155 //---------------------------------------------------------------
156 Bool_t AliTOFLvHvDataPoints::ProcessData(TMap& aliasMap) {
158 // method to process the data
161 if(!(fAliasNamesXHVmap[0][0]) || !(fAliasNamesXLVmap[0])) Init();
163 AliInfo(Form(" Start Time = %i",fStartTime));
164 AliInfo(Form(" End Time = %i",fEndTime));
165 AliInfo(Form(" Start Time DCS Query= %i",fStartTimeDCSQuery));
166 AliInfo(Form(" End Time DCS Query= %i",fEndTimeDCSQuery));
168 if (fEndTime==fStartTime){
169 AliError(Form(" Run with null time length: start time = %d = end time = %d",fStartTime,fEndTime));
174 if (!ReadHVDataPoints(aliasMap)) return kFALSE;
175 AliDebug(1,Form(" Number of HV dps = %d",fNumberOfHVdataPoints));
176 if (!ReadLVDataPoints(aliasMap)) return kFALSE;
177 AliDebug(1,Form(" Number of LV dps = %d",fNumberOfLVdataPoints));
179 if (!MergeHVmap()) return kFALSE;
181 if (!MergeLVmap()) return kFALSE;
183 if (!MergeMaps()) return kFALSE;
191 //---------------------------------------------------------------
192 Bool_t AliTOFLvHvDataPoints::MergeMaps() {
194 // Merge together LV and HV maps
200 for (Int_t ii=1; ii<fNumberOfHVdataPoints-1; ii++)
201 for (Int_t jj=1; jj<fNumberOfLVdataPoints-1; jj++) {
202 if (fHVDataPoints[ii]->GetTime()==fLVDataPoints[jj]->GetTime())
207 fNumberOfHVandLVmaps = fNumberOfHVdataPoints-2+fNumberOfLVdataPoints-2-counter+2;
208 AliInfo(Form(" Number of TOF HVandLV dps in the current run = %d",fNumberOfHVandLVmaps));
211 Int_t timeMaps[kNmaxDataPoints];
212 for (Int_t ii=0; ii<kNmaxDataPoints; ii++) timeMaps[ii]=0;
214 for (Int_t ii=0; ii<fNumberOfHVdataPoints; ii++)
215 timeMaps[ii]=fHVDataPoints[ii]->GetTime();
217 Bool_t check = kTRUE;
218 for (Int_t jj=0; jj<fNumberOfLVdataPoints; jj++) {
220 for (Int_t ii=0; ii<fNumberOfHVdataPoints; ii++)
221 check=check&&(fLVDataPoints[jj]->GetTime()!=timeMaps[ii]);
225 timeMaps[fNumberOfHVdataPoints+counter]=fLVDataPoints[jj]->GetTime();
228 if (fNumberOfHVdataPoints+counter+1!=fNumberOfHVandLVmaps) AliWarning("Something is wrong!");
230 Int_t controller[kNmaxDataPoints];
231 for (Int_t ii=0; ii<kNmaxDataPoints; ii++) controller[ii]=-1;
232 TMath::Sort(fNumberOfHVandLVmaps,timeMaps,controller,kFALSE); // increasing order
235 Short_t array[kNpads];
236 for (Int_t iPad=0; iPad<kNpads; iPad++) array[iPad]=-1;
239 // HVandLV status map @ SOR
240 for (Int_t iPad=0; iPad<kNpads; iPad++)
241 array[iPad] = fHVDataPoints[0]->GetCellValue(iPad)*fLVDataPoints[0]->GetCellValue(iPad);
242 time = timeMaps[controller[0]];
243 AliTOFDCSmaps *object0 = new AliTOFDCSmaps(time,array);
246 // HVandLV status map during run
247 for (Int_t index=1; index<fNumberOfHVandLVmaps-1; index++) {
248 time = timeMaps[controller[index]];
249 AliDebug(2,Form(" controller=%d time=%d ", controller[index],time));
251 for (Int_t ii=0; ii<fNumberOfHVdataPoints-1; ii++)
252 for (Int_t jj=0; jj<fNumberOfLVdataPoints-1; jj++) {
254 if ( ( ( fHVDataPoints[ii]->GetTime()==time && fHVDataPoints[ii+1]->GetTime()>time ) &&
255 ( fLVDataPoints[jj]->GetTime()<=time && fLVDataPoints[jj+1]->GetTime()>time ) ) ||
256 ( ( fLVDataPoints[jj]->GetTime()==time && fLVDataPoints[jj+1]->GetTime()>time ) &&
257 ( fHVDataPoints[ii]->GetTime()<=time && fHVDataPoints[ii+1]->GetTime()>time ) ) ) {
259 AliDebug(2,Form(" HVdp_time=%d, LVdp_time=%d ",fHVDataPoints[ii]->GetTime(), fLVDataPoints[jj]->GetTime()));
261 for (Int_t iPad=0; iPad<kNpads; iPad++)
262 array[iPad] = fHVDataPoints[ii]->GetCellValue(iPad)*fLVDataPoints[jj]->GetCellValue(iPad);
263 AliTOFDCSmaps *object = new AliTOFDCSmaps(time,array);
271 // HVandLV status map @ EOR
272 for (Int_t iPad=0; iPad<kNpads; iPad++)
273 array[iPad] = fHVDataPoints[fNumberOfHVdataPoints-1]->GetCellValue(iPad)*fLVDataPoints[fNumberOfLVdataPoints-1]->GetCellValue(iPad);
274 time = timeMaps[controller[fNumberOfHVandLVmaps-1]];
275 AliTOFDCSmaps *object1 = new AliTOFDCSmaps(time,array);
276 fMap[fNumberOfHVandLVmaps-1]= object1;
283 //---------------------------------------------------------------
284 Bool_t AliTOFLvHvDataPoints::MergeHVmap() {
286 // Create HV maps from HV dps
289 Bool_t check= kFALSE;
291 for (Int_t iPad=0; iPad<kNpads; iPad+=96*91)
292 AliDebug(2,Form(" HVdp0: channel=%6d -> %1d",iPad,fHVDataPoints[0]->GetCellValue(iPad)));
294 if (fNumberOfHVdataPoints==2)
297 for (Int_t ii=1; ii<fNumberOfHVdataPoints-1; ii++) {
299 for (Int_t iPad=0; iPad<kNpads; iPad++) {
300 if (fHVDataPoints[ii]->GetCellValue(iPad)==-1)
301 fHVDataPoints[ii]->SetCellValue(iPad,fHVDataPoints[ii-1]->GetCellValue(iPad));
303 for (Int_t iPad=0; iPad<kNpads; iPad+=96*91)
304 AliDebug(2,Form("HVdp%d: channel=%6d -> %1d",ii,iPad,fHVDataPoints[ii]->GetCellValue(iPad)));
314 //---------------------------------------------------------------
315 Bool_t AliTOFLvHvDataPoints::MergeLVmap() {
317 // Create LV maps from LV dps
320 Bool_t check= kFALSE;
322 for (Int_t iPad=0; iPad<kNpads; iPad+=96*91)
323 AliDebug(2,Form(" LVdp0: channel=%6d -> %1d",iPad,fLVDataPoints[0]->GetCellValue(iPad)));
325 if (fNumberOfLVdataPoints==2)
328 for (Int_t ii=1; ii<fNumberOfLVdataPoints-1; ii++) {
330 for (Int_t iPad=0; iPad<kNpads; iPad++) {
331 if (fLVDataPoints[ii]->GetCellValue(iPad)==-1)
332 fLVDataPoints[ii]->SetCellValue(iPad,fLVDataPoints[ii-1]->GetCellValue(iPad));
334 for (Int_t iPad=0; iPad<kNpads; iPad+=96*91)
335 AliDebug(2,Form("LVpd%d: channel=%6d -> %1d",ii,iPad,fLVDataPoints[ii]->GetCellValue(iPad)));
345 //---------------------------------------------------------------
346 Bool_t AliTOFLvHvDataPoints::ReadHVDataPoints(TMap& aliasMap) {
353 AliDCSValue* aValuePrev;
358 Short_t dummy[kNpads];
360 for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
361 // starting loop on aliases
362 for (int i=0; i<kNsectors; i++)
363 for (int j=0; j<kNplates; j++) {
364 aliasArr = (TObjArray*) aliasMap.GetValue(fAliasNamesXHVmap[i][j].Data());
366 AliError(Form("Alias %s not found!", fAliasNamesXHVmap[i][j].Data()));
368 return kFALSE; // returning only in case we are not in a FDR run
373 nEntries = aliasArr->GetEntries();
376 AliError(Form("Alias %s has no entries! Nothing will be stored",
377 fAliasNamesXHVmap[i][j].Data()));
382 for (Int_t iEntry=0; iEntry<nEntries; iEntry++) {
383 for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
384 aValue = (AliDCSValue*) aliasArr->At(iEntry);
385 val = aValue->GetUInt();
386 time = aValue->GetTimeStamp();
387 if (iEntry==0 || iEntry==nEntries-1) {
388 FillHVarrayPerDataPoint(i,j,val,dummy);
389 AliTOFDCSmaps *object = new AliTOFDCSmaps(time,dummy);
390 InsertHVDataPoint(object);
393 aValuePrev = (AliDCSValue*) aliasArr->At(iEntry-1);
394 if (aValuePrev->GetUInt()!=val) {
395 FillHVarrayPerDataPoint(i,j,val,dummy);
396 AliTOFDCSmaps *object = new AliTOFDCSmaps(time,dummy);
397 InsertHVDataPoint(object);
405 if (fNumberOfHVdataPoints==0) {
406 AliInfo("Valid LV dps not found. By default all HV TOF channels (except the ones in the PHOS holes) switched ON.");
407 for (int i=0; i<kNsectors; i++)
408 for (int j=0; j<kNplates; j++) {
409 for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
410 if ( (i==13 || i==14 || i==15) && j==2) {
411 FillHVarrayPerDataPoint(i,j,0,dummy);
412 AliTOFDCSmaps *object = new AliTOFDCSmaps(0,dummy);
413 InsertHVDataPoint(object);
416 FillHVarrayPerDataPoint(i,j,1,dummy);
417 AliTOFDCSmaps *object = new AliTOFDCSmaps(0,dummy);
418 InsertHVDataPoint(object);
422 for (int i=0; i<kNsectors; i++)
423 for (int j=0; j<kNplates; j++) {
424 for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
425 if ( (i==13 || i==14 || i==15) && j==2) {
426 FillHVarrayPerDataPoint(i,j,0,dummy);
427 AliTOFDCSmaps *object = new AliTOFDCSmaps(999999,dummy);
428 InsertHVDataPoint(object);
431 FillHVarrayPerDataPoint(i,j,1,dummy);
432 AliTOFDCSmaps *object = new AliTOFDCSmaps(999999,dummy);
433 InsertHVDataPoint(object);
442 //---------------------------------------------------------------
443 Bool_t AliTOFLvHvDataPoints::ReadLVDataPoints(TMap& aliasMap) {
450 AliDCSValue* aValuePrev;
455 Short_t dummy[kNpads];
457 for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
458 // starting loop on aliases
459 for (int i=0; i<kNddl; i++) {
460 aliasArr = (TObjArray*) aliasMap.GetValue(fAliasNamesXLVmap[i].Data());
462 AliError(Form("Alias %s not found!", fAliasNamesXLVmap[i].Data()));
464 return kFALSE; // returning only in case we are not in a FDR run
469 nEntries = aliasArr->GetEntries();
472 AliError(Form("Alias %s has no entries! Nothing will be stored",
473 fAliasNamesXLVmap[i].Data()));
478 for (Int_t iEntry=0; iEntry<nEntries; iEntry++) {
479 for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
480 aValue = (AliDCSValue*) aliasArr->At(iEntry);
481 val = aValue->GetUInt();
482 time = aValue->GetTimeStamp();
483 if (iEntry==0 || iEntry==nEntries-1) {
484 FillLVarrayPerDataPoint(i,val,dummy);
485 AliTOFDCSmaps *object = new AliTOFDCSmaps(time,dummy);
486 InsertLVDataPoint(object);
489 aValuePrev = (AliDCSValue*) aliasArr->At(iEntry-1);
490 if (aValuePrev->GetUInt()!=val) {
491 FillLVarrayPerDataPoint(i,val,dummy);
492 AliTOFDCSmaps *object = new AliTOFDCSmaps(time,dummy);
493 InsertLVDataPoint(object);
500 if (fNumberOfLVdataPoints==0) {
501 AliInfo("Valid LV dps not found. By default all LV TOF channels switched ON.");
502 for (int i=0; i<kNddl; i++) {
503 for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
504 FillLVarrayPerDataPoint(i,0,dummy);
505 AliTOFDCSmaps *object = new AliTOFDCSmaps(0,dummy);
506 InsertLVDataPoint(object);
509 for (int i=0; i<kNddl; i++) {
510 for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
511 FillLVarrayPerDataPoint(i,0,dummy);
512 AliTOFDCSmaps *object = new AliTOFDCSmaps(999999,dummy);
513 InsertLVDataPoint(object);
522 //---------------------------------------------------------------
523 Int_t AliTOFLvHvDataPoints::InsertHVDataPoint(AliTOFDCSmaps *object)
526 // Insert HV dp in the HV dps array.
527 // The HV dps array is sorted according to increasing dp timeStamp value
530 if (fNumberOfHVdataPoints==kNmaxDataPoints) {
531 AliError("Too many HV data points!");
535 if (fNumberOfHVdataPoints==0) {
536 fHVDataPoints[fNumberOfHVdataPoints++] = object;
540 for (Int_t index=0; index<fNumberOfHVdataPoints; index++) {
541 if (object->GetTime()==fHVDataPoints[index]->GetTime()) {
542 fHVDataPoints[index]->Update(object);
547 Int_t ii = FindHVdpIndex(object->GetTime());
548 memmove(fHVDataPoints+ii+1 ,fHVDataPoints+ii,(fNumberOfHVdataPoints-ii)*sizeof(AliTOFDCSmaps*));
549 fHVDataPoints[ii] = object;
550 fNumberOfHVdataPoints++;
556 //_________________________________________________________________________
557 Int_t AliTOFLvHvDataPoints::FindHVdpIndex(Int_t z) const {
559 // This function returns the index of the nearest HV DP in time
562 if (fNumberOfHVdataPoints==0) return 0;
563 if (z <= fHVDataPoints[0]->GetTime()) return 0;
564 if (z > fHVDataPoints[fNumberOfHVdataPoints-1]->GetTime()) return fNumberOfHVdataPoints;
565 Int_t b = 0, e = fNumberOfHVdataPoints-1, m = (b+e)/2;
566 for (; b<e; m=(b+e)/2) {
567 if (z > fHVDataPoints[m]->GetTime()) b=m+1;
575 //---------------------------------------------------------------
576 Int_t AliTOFLvHvDataPoints::InsertLVDataPoint(AliTOFDCSmaps *object)
579 // Insert LV dp in the LV dps array.
580 // The LV dps array is sorted according to increasing dp timeStamp value
583 if (fNumberOfLVdataPoints==kNmaxDataPoints) {
584 AliError("Too many LV data points!");
588 if (fNumberOfLVdataPoints==0) {
589 fLVDataPoints[fNumberOfLVdataPoints++] = object;
593 for (Int_t index=0; index<fNumberOfLVdataPoints; index++) {
594 if (object->GetTime()==fLVDataPoints[index]->GetTime()) {
595 fLVDataPoints[index]->Update(object);
600 Int_t ii = FindLVdpIndex(object->GetTime());
601 memmove(fLVDataPoints+ii+1 ,fLVDataPoints+ii,(fNumberOfLVdataPoints-ii)*sizeof(AliTOFDCSmaps*));
602 fLVDataPoints[ii] = object;
603 fNumberOfLVdataPoints++;
609 //_________________________________________________________________________
610 Int_t AliTOFLvHvDataPoints::FindLVdpIndex(Int_t z) const {
612 // This function returns the index of the nearest LV DP in time
615 if (fNumberOfLVdataPoints==0) return 0;
616 if (z <= fLVDataPoints[0]->GetTime()) return 0;
617 if (z > fLVDataPoints[fNumberOfLVdataPoints-1]->GetTime()) return fNumberOfLVdataPoints;
618 Int_t b = 0, e = fNumberOfLVdataPoints-1, m = (b+e)/2;
619 for (; b<e; m=(b+e)/2) {
620 if (z > fLVDataPoints[m]->GetTime()) b=m+1;
628 //---------------------------------------------------------------
629 void AliTOFLvHvDataPoints::Init(){
631 // Initialize aliases and DCS data
635 for(int i=0;i<kNsectors;i++)
636 for(int j=0;j<kNplates;j++) {
637 fAliasNamesXHVmap[i][j] = "TOF_HVSTATUS_";
638 sindex.Form("SM%02dMOD%1d",i,j);
639 fAliasNamesXHVmap[i][j] += sindex;
643 for(int i=0;i<kNddl;i++) {
644 fAliasNamesXLVmap[i] = "TOF_FEACSTATUS_";
645 sindex.Form("%02d",i);
646 fAliasNamesXLVmap[i] += sindex;
651 //---------------------------------------------------------------
652 void AliTOFLvHvDataPoints::FillHVarrayPerDataPoint(Int_t sector, Int_t plate, UInt_t baseWord, Short_t *array)
655 // Set the status of the TOF pads connected to the HV dp
656 // labelled by sector and plate numbers
659 Int_t det[5] = {sector, plate, -1, -1, -1};
664 for (Int_t iStrip=0; iStrip<AliTOFGeometry::NStrip(plate); iStrip++) {
665 checkBit = AliBitPacking::UnpackWord(baseWord,iStrip,iStrip);
666 for (Int_t iPadZ=0; iPadZ<AliTOFGeometry::NpadZ(); iPadZ++)
667 for (Int_t iPadX=0; iPadX<AliTOFGeometry::NpadX(); iPadX++) {
671 channel = AliTOFGeometry::GetIndex(det);
672 array[channel]=checkBit;
679 //---------------------------------------------------------------
680 void AliTOFLvHvDataPoints::FillLVarrayPerDataPoint(Int_t nDDL, UInt_t baseWord, Short_t *array)
683 // Set the status of the TOF pads connected to the LV dp
684 // labelled by TOF crate number
687 Int_t det[5] = {nDDL/4, -1, -1, -1, -1};
690 Int_t iStripXsm[6] = {-1,-1,-1,-1,-1,-1};
691 Int_t firstPadX = -1;
698 for (Int_t nFEAC=0; nFEAC<8; nFEAC++) {
699 checkBit = AliBitPacking::UnpackWord(baseWord,nFEAC,nFEAC);
702 GetStripsConnectedToFEAC(nDDL, nFEAC, iStripXsm, firstPadX,lastPadX);
703 for (Int_t index=0; index<6; index++) {
704 if (iStripXsm[index]==-1) continue;
706 for (Int_t iPadZ=0; iPadZ<AliTOFGeometry::NpadZ(); iPadZ++)
707 for (Int_t iPadX=firstPadX; iPadX<=lastPadX; iPadX++) {
708 AliTOFGeometry::GetStripAndModule(iStripXsm[index],plate,strip);
713 channel = AliTOFGeometry::GetIndex(det);
714 array[channel]=checkBit;
722 //---------------------------------------------------------------
723 void AliTOFLvHvDataPoints::GetStripsConnectedToFEAC(Int_t nDDL, Int_t nFEAC, Int_t *iStrip, Int_t &firstPadX, Int_t &lastPadX)
726 // FEAC-strip mapping:
727 // return the strips and first PadX numbers
728 // connected to the FEAC number nFEAC in the crate number nDDL
731 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=-1;
733 if (nDDL<0 || nDDL>=kNddl || nFEAC<0 || nFEAC>=8) return;
738 lastPadX = AliTOFGeometry::NpadX()/2-1;
741 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=ii+6*nFEAC;
743 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=ii+6*nFEAC;
745 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=ii+6*nFEAC-1;
747 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=ii+6*nFEAC-1;
749 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=ii+6*nFEAC-2;
751 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=ii+6*nFEAC-2;
755 firstPadX = AliTOFGeometry::NpadX()/2;
756 lastPadX = AliTOFGeometry::NpadX()-1;
759 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=ii+6*nFEAC;
761 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=ii+6*nFEAC;
763 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=ii+6*nFEAC-1;
765 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=ii+6*nFEAC-1;
767 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=ii+6*nFEAC-1;
769 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=ii+6*nFEAC-2;
773 firstPadX = AliTOFGeometry::NpadX()/2;
774 lastPadX = AliTOFGeometry::NpadX()-1;
777 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=90-(ii+6*nFEAC);
779 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=90-(ii+6*nFEAC);
781 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=90-(ii+6*nFEAC-1);
783 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=90-(ii+6*nFEAC-1);
785 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=90-(ii+6*nFEAC-2);
787 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=90-(ii+6*nFEAC-2);
792 lastPadX = AliTOFGeometry::NpadX()/2-1;
795 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=90-(ii+6*nFEAC);
797 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=90-(ii+6*nFEAC);
799 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=90-(ii+6*nFEAC-1);
801 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=90-(ii+6*nFEAC-1);
803 for (Int_t ii=0; ii<5; ii++) iStrip[ii]=90-(ii+6*nFEAC-1);
805 for (Int_t ii=0; ii<6; ii++) iStrip[ii]=90-(ii+6*nFEAC-2);
812 //---------------------------------------------------------------
813 void AliTOFLvHvDataPoints::Draw(const Option_t* /*option*/)
816 // Draw all histos and graphs
819 if(!fIsProcessed) return;
822 TString canvasHistoName="Histos";
823 ch = new TCanvas(canvasHistoName,canvasHistoName,20,20,600,600);
831 //---------------------------------------------------------------
832 void AliTOFLvHvDataPoints::DrawHVandLVMap(Int_t index)
835 // Draw HV+LV map labelled as index
838 if(!fIsProcessed) return;
840 if (index>=fNumberOfHVandLVmaps) return;
842 AliTOFDCSmaps *mappa=(AliTOFDCSmaps*)GetHVandLVmap(index);
845 if (index==0) sprintf(title,"HVandLV map at time %d (%dst map)",mappa->GetTime(),index+1);
846 else if (index==1) sprintf(title,"HVandLV map at time %d (%dnd map)",mappa->GetTime(),index+1);
847 else if (index==2) sprintf(title,"HVandLV map at time %d (%drd map)",mappa->GetTime(),index+1);
848 else if (index>=3) sprintf(title,"HVandLV map at time %d (%dth map)",mappa->GetTime(),index+1);
850 fHisto = new TH1C("histo","",kNpads,-0.5,kNpads-0.5);
852 fHisto->SetTitle(title);
854 for (Int_t ii=0; ii<kNpads; ii++)
855 fHisto->SetBinContent(ii+1,mappa->GetCellValue(ii));
861 //---------------------------------------------------------------
862 void AliTOFLvHvDataPoints::DrawLVMap(Int_t index)
865 // Draw LV map labelled as index
868 if(!fIsProcessed) return;
870 if (index>=fNumberOfLVdataPoints) return;
872 AliTOFDCSmaps *mappa=(AliTOFDCSmaps*)GetLVmap(index);
875 if (index==0) sprintf(title,"LV map at time %d (%dst map)",mappa->GetTime(),index+1);
876 else if (index==1) sprintf(title,"LV map at time %d (%dnd map)",mappa->GetTime(),index+1);
877 else if (index==2) sprintf(title,"LV map at time %d (%drd map)",mappa->GetTime(),index+1);
878 else if (index>=3) sprintf(title,"LV map at time %d (%dth map)",mappa->GetTime(),index+1);
880 fHisto = new TH1C("histo","",kNpads,-0.5,kNpads-0.5);
882 fHisto->SetTitle(title);
884 for (Int_t ii=0; ii<kNpads; ii++)
885 fHisto->SetBinContent(ii+1,mappa->GetCellValue(ii));
891 //---------------------------------------------------------------
892 void AliTOFLvHvDataPoints::DrawHVMap(Int_t index)
895 // Draw HV map labelled as index
898 if(!fIsProcessed) return;
900 if (index>=fNumberOfHVdataPoints) return;
902 AliTOFDCSmaps *mappa=(AliTOFDCSmaps*)GetHVmap(index);
905 if (index==0) sprintf(title,"HV map at time %d (%dst map)",mappa->GetTime(),index+1);
906 else if (index==1) sprintf(title,"HV map at time %d (%dnd map)",mappa->GetTime(),index+1);
907 else if (index==2) sprintf(title,"HV map at time %d (%drd map)",mappa->GetTime(),index+1);
908 else if (index>=3) sprintf(title,"HV map at time %d (%dth map)",mappa->GetTime(),index+1);
910 fHisto = new TH1C("histo","",kNpads,-0.5,kNpads-0.5);
912 fHisto->SetTitle(title);
914 for (Int_t ii=0; ii<kNpads; ii++)
915 fHisto->SetBinContent(ii+1,mappa->GetCellValue(ii));
921 //---------------------------------------------------------------
922 AliTOFDCSmaps *AliTOFLvHvDataPoints::GetHVandLVmapAtEOR()
925 // Returns HVandLV status map at EOR.
926 // If the end-of-run has been caused by TOF self,
927 // the last but two value of HVandLV status map
928 // will be taken into account.
929 // This last condition is true
930 // if the time interval between the second-last DP and the last one
934 AliTOFDCSmaps * lvANDhvMap = 0;
936 if (fNumberOfHVandLVmaps==2) { // nothing changed during the run
938 lvANDhvMap = fMap[fNumberOfHVandLVmaps-1];
943 if (fMap[fNumberOfHVandLVmaps-1]->GetTime()-fMap[fNumberOfHVandLVmaps-2]->GetTime()<=60)
944 lvANDhvMap = (AliTOFDCSmaps*)fMap[fNumberOfHVandLVmaps-3];
946 lvANDhvMap = (AliTOFDCSmaps*)fMap[fNumberOfHVandLVmaps-1];