Updated code to read LV.and.HV status maps during a run. Waiting numbering conversion...
[u/mrichter/AliRoot.git] / TOF / AliTOFLvHvDataPoints.cxx
index 4e2e193..ef6113e 100644 (file)
@@ -27,13 +27,15 @@ $Log: AliTOFLvHvDataPoints.cxx,v $
 #include "TTimeStamp.h"
 #include "TMap.h"
 #include "TMath.h"
+#include "TH1C.h"
 
 #include "AliDCSValue.h"
 #include "AliLog.h"
 #include "AliBitPacking.h"
 
-#include "AliTOFLvHvDataPoints.h"
 #include "AliTOFGeometry.h"
+#include "AliTOFDCSmaps.h"
+#include "AliTOFLvHvDataPoints.h"
 
 class AliCDBMetaData;
 class TDatime;
@@ -53,6 +55,8 @@ AliTOFLvHvDataPoints::AliTOFLvHvDataPoints():
   fNumberOfLVdataPoints(0),
   fNumberOfHVdataPoints(0),
   fNumberOfHVandLVmaps(0),
+  fStartingLVmap(0x0),
+  fStartingHVmap(0x0),
   fHisto(0x0)
 {
   // main constructor 
@@ -72,6 +76,8 @@ AliTOFLvHvDataPoints::AliTOFLvHvDataPoints(Int_t nRun, UInt_t startTime, UInt_t
   fNumberOfLVdataPoints(0),
   fNumberOfHVdataPoints(0),
   fNumberOfHVandLVmaps(0),
+  fStartingLVmap(new AliTOFDCSmaps()),
+  fStartingHVmap(new AliTOFDCSmaps()),
   fHisto(new TH1C("histo","",kNpads,-0.5,kNpads-0.5))
 {
 
@@ -101,10 +107,12 @@ AliTOFLvHvDataPoints::AliTOFLvHvDataPoints(const AliTOFLvHvDataPoints & data):
   fNumberOfLVdataPoints(data.fNumberOfLVdataPoints),
   fNumberOfHVdataPoints(data.fNumberOfHVdataPoints),
   fNumberOfHVandLVmaps(data.fNumberOfHVandLVmaps),
+  fStartingLVmap(data.fStartingLVmap),
+  fStartingHVmap(data.fStartingHVmap),
   fHisto(data.fHisto)
 {
 
-// copy constructor
+  // copy constructor
 
   for(int i=0;i<kNddl;i++)
     fAliasNamesXLVmap[i]=data.fAliasNamesXLVmap[i];
@@ -118,7 +126,7 @@ AliTOFLvHvDataPoints::AliTOFLvHvDataPoints(const AliTOFLvHvDataPoints & data):
 
 AliTOFLvHvDataPoints& AliTOFLvHvDataPoints:: operator=(const AliTOFLvHvDataPoints & data) { 
 
-// assignment operator
+  // assignment operator
 
   if (this == &data)
     return *this;
@@ -134,6 +142,9 @@ AliTOFLvHvDataPoints& AliTOFLvHvDataPoints:: operator=(const AliTOFLvHvDataPoint
   fNumberOfHVdataPoints=data.fNumberOfHVdataPoints;
   fNumberOfHVandLVmaps=data.fNumberOfHVandLVmaps;
 
+  fStartingLVmap=data.fStartingLVmap;
+  fStartingHVmap=data.fStartingHVmap;
+
   for(int i=0;i<kNddl;i++)
     fAliasNamesXLVmap[i]=data.fAliasNamesXLVmap[i];
 
@@ -150,6 +161,9 @@ AliTOFLvHvDataPoints::~AliTOFLvHvDataPoints() {
 
   // destructor
 
+  delete fStartingLVmap;
+  delete fStartingHVmap;
+
 }
 
 //---------------------------------------------------------------
@@ -171,15 +185,16 @@ Bool_t AliTOFLvHvDataPoints::ProcessData(TMap& aliasMap) {
   }
 
 
-  if (!ReadHVDataPoints(aliasMap)) return kFALSE;
-  AliDebug(1,Form(" Number of HV dps = %d",fNumberOfHVdataPoints));
   if (!ReadLVDataPoints(aliasMap)) return kFALSE;
-  AliDebug(1,Form(" Number of LV dps = %d",fNumberOfLVdataPoints));
+  AliDebug(1,Form(" Number of LV dp value changes = %d",fNumberOfLVdataPoints));
 
-  if (!MergeHVmap()) return kFALSE;
+  if (!ReadHVDataPoints(aliasMap)) return kFALSE;
+  AliDebug(1,Form(" Number of HV dp value changes = %d",fNumberOfHVdataPoints));
 
   if (!MergeLVmap()) return kFALSE;
 
+  if (!MergeHVmap()) return kFALSE;
+
   if (!MergeMaps()) return kFALSE;
 
   fIsProcessed=kTRUE;
@@ -194,25 +209,14 @@ Bool_t AliTOFLvHvDataPoints::MergeMaps() {
   // Merge together LV and HV maps
   //
 
-  Int_t counter=0;
-
-
-  for (Int_t ii=1; ii<fNumberOfHVdataPoints-1; ii++)
-    for (Int_t jj=1; jj<fNumberOfLVdataPoints-1; jj++) {
-      if (fHVDataPoints[ii]->GetTime()==fLVDataPoints[jj]->GetTime())
-       counter++;
-    }
-
-
-  fNumberOfHVandLVmaps = fNumberOfHVdataPoints-2+fNumberOfLVdataPoints-2-counter+2;
-  AliInfo(Form(" Number of TOF HVandLV dps in the current run = %d",fNumberOfHVandLVmaps));
-
-  counter=-1;
   Int_t timeMaps[kNmaxDataPoints];
   for (Int_t ii=0; ii<kNmaxDataPoints; ii++) timeMaps[ii]=0;
 
-  for (Int_t ii=0; ii<fNumberOfHVdataPoints; ii++)
-    timeMaps[ii]=fHVDataPoints[ii]->GetTime();
+  for (Int_t ii=0; ii<fNumberOfHVdataPoints; ii++) {
+    timeMaps[fNumberOfHVandLVmaps++]=fHVDataPoints[ii]->GetTime();
+    //timeMaps[fNumberOfHVandLVmaps]=fHVDataPoints[ii]->GetTime();
+    //fNumberOfHVandLVmaps++;
+  }
 
   Bool_t check = kTRUE;
   for (Int_t jj=0; jj<fNumberOfLVdataPoints; jj++) {
@@ -221,60 +225,70 @@ Bool_t AliTOFLvHvDataPoints::MergeMaps() {
       check=check&&(fLVDataPoints[jj]->GetTime()!=timeMaps[ii]);
 
     if (check) {
-      counter++;
-      timeMaps[fNumberOfHVdataPoints+counter]=fLVDataPoints[jj]->GetTime();
+      timeMaps[fNumberOfHVandLVmaps++]=fLVDataPoints[jj]->GetTime();
+      //timeMaps[fNumberOfHVandLVmaps]=fLVDataPoints[jj]->GetTime();
+      //fNumberOfHVandLVmaps++;
     }
   }
-  if (fNumberOfHVdataPoints+counter+1!=fNumberOfHVandLVmaps) AliWarning("Something is wrong!");
+
+  AliInfo(Form(" TOF HV dps = %d; TOF LV dps = %d; TOF HVandLV dps %d",
+              fNumberOfHVdataPoints, fNumberOfLVdataPoints, fNumberOfHVandLVmaps));
+
 
   Int_t controller[kNmaxDataPoints];
   for (Int_t ii=0; ii<kNmaxDataPoints; ii++) controller[ii]=-1;
   TMath::Sort(fNumberOfHVandLVmaps,timeMaps,controller,kFALSE); // increasing order
 
+  //for (Int_t ii=0; ii<fNumberOfHVandLVmaps; ii++)
+  //AliDebug(3,Form(" time[%d] = %d", controller[ii],timeMaps[controller[ii]]));
 
   Short_t array[kNpads];
   for (Int_t iPad=0; iPad<kNpads; iPad++) array[iPad]=-1;
   Int_t time = 0;
 
-  // HVandLV status map @ SOR
-  for (Int_t iPad=0; iPad<kNpads; iPad++)
-    array[iPad] = fHVDataPoints[0]->GetCellValue(iPad)*fLVDataPoints[0]->GetCellValue(iPad);
-  time = timeMaps[controller[0]];
-  AliTOFDCSmaps *object0 = new AliTOFDCSmaps(time,array);
-  fMap[0]= object0;
-
   // HVandLV status map during run
-  for (Int_t index=1; index<fNumberOfHVandLVmaps-1; index++) {
+  for (Int_t index=0; index<fNumberOfHVandLVmaps; index++) {
     time = timeMaps[controller[index]];
-    AliDebug(2,Form(" controller=%d time=%d ", controller[index],time));
+    AliDebug(2,Form(" time[%d] = %d ", controller[index],time));
 
-    for (Int_t ii=0; ii<fNumberOfHVdataPoints-1; ii++)
-      for (Int_t jj=0; jj<fNumberOfLVdataPoints-1; jj++) {
+    for (Int_t ii=0,jj=0; ii<fNumberOfHVdataPoints && jj<fNumberOfLVdataPoints; ii++,jj++) {
 
-       if ( ( ( fHVDataPoints[ii]->GetTime()==time && fHVDataPoints[ii+1]->GetTime()>time ) &&
-              ( fLVDataPoints[jj]->GetTime()<=time && fLVDataPoints[jj+1]->GetTime()>time ) ) ||
-            ( ( fLVDataPoints[jj]->GetTime()==time && fLVDataPoints[jj+1]->GetTime()>time ) &&
-              ( fHVDataPoints[ii]->GetTime()<=time && fHVDataPoints[ii+1]->GetTime()>time ) ) ) {
+      if ( (fHVDataPoints[ii]->GetTime()==time && fLVDataPoints[jj]->GetTime()<=time) ||
+          (fLVDataPoints[jj]->GetTime()==time && fHVDataPoints[ii]->GetTime()<=time) ) {
 
-         AliDebug(2,Form(" HVdp_time=%d, LVdp_time=%d ",fHVDataPoints[ii]->GetTime(), fLVDataPoints[jj]->GetTime()));
+       AliDebug(2,Form(" HVdp_time[%d]=%d, LVdp_time[%d]=%d",
+                       ii,fHVDataPoints[ii]->GetTime(),
+                       jj,fLVDataPoints[jj]->GetTime()));
+       for (Int_t iPad=0; iPad<kNpads; iPad++)
+         array[iPad] = fHVDataPoints[ii]->GetCellValue(iPad)*fLVDataPoints[jj]->GetCellValue(iPad);
+       AliTOFDCSmaps *object = new AliTOFDCSmaps(time,array);
+       fMap[index]= object;
+       break;
 
-         for (Int_t iPad=0; iPad<kNpads; iPad++)
-           array[iPad] = fHVDataPoints[ii]->GetCellValue(iPad)*fLVDataPoints[jj]->GetCellValue(iPad);
-         AliTOFDCSmaps *object = new AliTOFDCSmaps(time,array);
-         fMap[index]= object;
-         break;
-       }
       }
+      else if ( fHVDataPoints[ii]->GetTime()==time && fLVDataPoints[jj]->GetTime()>time ) {
 
-  }
+       AliDebug(2,Form(" HVdp_time[%d]=%d, (no LVdp)",ii,fHVDataPoints[ii]->GetTime()));
+       for (Int_t iPad=0; iPad<kNpads; iPad++)
+         array[iPad] = fHVDataPoints[ii]->GetCellValue(iPad);
+       AliTOFDCSmaps *object = new AliTOFDCSmaps(time,array);
+       fMap[index]= object;
+       break;
 
-  // HVandLV status map @ EOR
-  for (Int_t iPad=0; iPad<kNpads; iPad++)
-    array[iPad] = fHVDataPoints[fNumberOfHVdataPoints-1]->GetCellValue(iPad)*fLVDataPoints[fNumberOfLVdataPoints-1]->GetCellValue(iPad);
-  time = timeMaps[controller[fNumberOfHVandLVmaps-1]];
-  AliTOFDCSmaps *object1 = new AliTOFDCSmaps(time,array);
-  fMap[fNumberOfHVandLVmaps-1]= object1;
+      } else if ( fLVDataPoints[jj]->GetTime()==time && fHVDataPoints[ii]->GetTime()>time ) {
+
+       AliDebug(2,Form(" LVdp_time[%d]=%d, (no HVdp)",jj,fLVDataPoints[jj]->GetTime()));
+       for (Int_t iPad=0; iPad<kNpads; iPad++)
+         array[iPad] = fLVDataPoints[jj]->GetCellValue(iPad);
+       AliTOFDCSmaps *object = new AliTOFDCSmaps(time,array);
+       fMap[index]= object;
+       break;
+
+      }
 
+    }
+
+  }
 
   return kTRUE;
 
@@ -288,20 +302,30 @@ Bool_t AliTOFLvHvDataPoints::MergeHVmap() {
 
   Bool_t check= kFALSE;
 
-  for (Int_t iPad=0; iPad<kNpads; iPad+=96*91)
-    AliDebug(2,Form(" HVdp0: channel=%6d -> %1d",iPad,fHVDataPoints[0]->GetCellValue(iPad)));
-
-  if (fNumberOfHVdataPoints==2)
-    check=kTRUE;
+  if (fNumberOfHVdataPoints==0)
+    return check;
   else {
-    for (Int_t ii=1; ii<fNumberOfHVdataPoints-1; ii++) {
 
+    // first map construction
+    for (Int_t iPad=0; iPad<kNpads; iPad++) {
+      if (fHVDataPoints[0]->GetCellValue(iPad)==-1)
+       fHVDataPoints[0]->SetCellValue(iPad,fStartingHVmap->GetCellValue(iPad));
+      //else
+      //fHVDataPoints[0]->SetCellValue(iPad,fHVDataPoints[0]->GetCellValue(iPad)*fStartingHVmap->GetCellValue(iPad));
+
+      if (iPad%(96*91)==0)
+       AliDebug(2,Form("HVdp0: channel=%6d -> %1d",iPad,fHVDataPoints[0]->GetCellValue(iPad)));
+    }
+
+    // other maps construction
+    for (Int_t ii=1; ii<fNumberOfHVdataPoints; ii++) {
       for (Int_t iPad=0; iPad<kNpads; iPad++) {
        if (fHVDataPoints[ii]->GetCellValue(iPad)==-1)
          fHVDataPoints[ii]->SetCellValue(iPad,fHVDataPoints[ii-1]->GetCellValue(iPad));
+
+       if (iPad%(96*91)==0)
+         AliDebug(2,Form("HVdp%d: channel=%6d -> %1d",ii,iPad,fHVDataPoints[ii]->GetCellValue(iPad)));
       }
-      for (Int_t iPad=0; iPad<kNpads; iPad+=96*91)
-       AliDebug(2,Form("HVdp%d: channel=%6d -> %1d",ii,iPad,fHVDataPoints[ii]->GetCellValue(iPad)));
     }
 
     check=kTRUE;
@@ -319,20 +343,30 @@ Bool_t AliTOFLvHvDataPoints::MergeLVmap() {
 
   Bool_t check= kFALSE;
 
-  for (Int_t iPad=0; iPad<kNpads; iPad+=96*91)
-    AliDebug(2,Form(" LVdp0: channel=%6d -> %1d",iPad,fLVDataPoints[0]->GetCellValue(iPad)));
-
-  if (fNumberOfLVdataPoints==2)
-    check=kTRUE;
+  if (fNumberOfLVdataPoints==0)
+    return check;
   else {
-    for (Int_t ii=1; ii<fNumberOfLVdataPoints-1; ii++) {
 
+    // first map construction
+    for (Int_t iPad=0; iPad<kNpads; iPad++) {
+      if (fLVDataPoints[0]->GetCellValue(iPad)==-1)
+       fLVDataPoints[0]->SetCellValue(iPad,fStartingLVmap->GetCellValue(iPad));
+      //else
+      //fLVDataPoints[0]->SetCellValue(iPad,fLVDataPoints[0]->GetCellValue(iPad)*fStartingLVmap->GetCellValue(iPad));
+
+      if (iPad%(96*91)==0)
+       AliDebug(2,Form("LVdp0: channel=%6d -> %1d",iPad,fLVDataPoints[0]->GetCellValue(iPad)));
+    }
+
+    // other maps construction
+    for (Int_t ii=1; ii<fNumberOfLVdataPoints; ii++) {
       for (Int_t iPad=0; iPad<kNpads; iPad++) {
        if (fLVDataPoints[ii]->GetCellValue(iPad)==-1)
          fLVDataPoints[ii]->SetCellValue(iPad,fLVDataPoints[ii-1]->GetCellValue(iPad));
+
+       if (iPad%(96*91)==0)
+         AliDebug(2,Form("LVdp%d: channel=%6d -> %1d",ii,iPad,fLVDataPoints[ii]->GetCellValue(iPad)));
       }
-      for (Int_t iPad=0; iPad<kNpads; iPad+=96*91)
-       AliDebug(2,Form("LVpd%d: channel=%6d -> %1d",ii,iPad,fLVDataPoints[ii]->GetCellValue(iPad)));
     }
 
     check=kTRUE;
@@ -351,7 +385,7 @@ Bool_t AliTOFLvHvDataPoints::ReadHVDataPoints(TMap& aliasMap) {
   TObjArray *aliasArr;
   AliDCSValue* aValue;
   AliDCSValue* aValuePrev;
-  UInt_t val = 0;
+  Int_t val = 0;
   Int_t time = 0;
   Int_t nEntries = 0;
 
@@ -372,6 +406,8 @@ Bool_t AliTOFLvHvDataPoints::ReadHVDataPoints(TMap& aliasMap) {
 
       nEntries = aliasArr->GetEntries();
     
+      if (nEntries<2) AliDebug(1, Form(" NB: number of values for dp %s %d (less than 2)",fAliasNamesXHVmap[i][j].Data(),nEntries));
+
       if (nEntries==0) {
        AliError(Form("Alias %s has no entries! Nothing will be stored",
                      fAliasNamesXHVmap[i][j].Data()));
@@ -379,23 +415,28 @@ Bool_t AliTOFLvHvDataPoints::ReadHVDataPoints(TMap& aliasMap) {
       }
       else {
 
-       for (Int_t iEntry=0; iEntry<nEntries; iEntry++) {
+       // read the first value
+       for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
+       aValue = (AliDCSValue*) aliasArr->At(0);
+       val = aValue->GetInt();
+       time = aValue->GetTimeStamp();
+       AliDebug(1, Form(" at t=%d, 1st value for dp %s = %d", time, fAliasNamesXHVmap[i][j].Data(), val));
+       FillHVarrayPerDataPoint(i,j,val,dummy);
+       AliTOFDCSmaps *object0 = new AliTOFDCSmaps(time,dummy);
+       if (InsertHVDataPoint(object0)!=0) return kTRUE; // to be verified
+
+       // read the values from the second one
+       for (Int_t iEntry=1; iEntry<nEntries; iEntry++) {
          for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
          aValue = (AliDCSValue*) aliasArr->At(iEntry);
-         val = aValue->GetUInt();
+         val = aValue->GetInt();
          time = aValue->GetTimeStamp();
-         if (iEntry==0 || iEntry==nEntries-1) {
+         AliDebug(1, Form(" at t=%d, %dth value for dp %s = %d", time, iEntry+1, fAliasNamesXHVmap[i][j].Data(), val));
+         aValuePrev = (AliDCSValue*) aliasArr->At(iEntry-1);
+         if (aValuePrev->GetInt()!=val) {
            FillHVarrayPerDataPoint(i,j,val,dummy);
            AliTOFDCSmaps *object = new AliTOFDCSmaps(time,dummy);
-           InsertHVDataPoint(object);
-         }
-         else {
-           aValuePrev = (AliDCSValue*) aliasArr->At(iEntry-1);
-           if (aValuePrev->GetUInt()!=val) {
-             FillHVarrayPerDataPoint(i,j,val,dummy);
-             AliTOFDCSmaps *object = new AliTOFDCSmaps(time,dummy);
-             InsertHVDataPoint(object);
-           }
+           if (InsertHVDataPoint(object)!=0) return kTRUE; // to be verified
          }
 
        }
@@ -403,38 +444,20 @@ Bool_t AliTOFLvHvDataPoints::ReadHVDataPoints(TMap& aliasMap) {
     }
 
   if (fNumberOfHVdataPoints==0) {
-    AliInfo("Valid LV dps not found. By default all HV TOF channels (except the ones in the PHOS holes) switched ON.");
-    for (int i=0; i<kNsectors; i++)
-      for (int j=0; j<kNplates; j++) {
-       for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
-       if ( (i==13 || i==14 || i==15) && j==2) {
-         FillHVarrayPerDataPoint(i,j,0,dummy);
-         AliTOFDCSmaps *object = new AliTOFDCSmaps(0,dummy);
-         InsertHVDataPoint(object);
-       }
-       else {
-         FillHVarrayPerDataPoint(i,j,1,dummy);
-         AliTOFDCSmaps *object = new AliTOFDCSmaps(0,dummy);
-         InsertHVDataPoint(object);
-       }
-      }
-
-    for (int i=0; i<kNsectors; i++)
-      for (int j=0; j<kNplates; j++) {
-       for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
-       if ( (i==13 || i==14 || i==15) && j==2) {
-         FillHVarrayPerDataPoint(i,j,0,dummy);
-         AliTOFDCSmaps *object = new AliTOFDCSmaps(999999,dummy);
-         InsertHVDataPoint(object);
-       }
-       else {
-         FillHVarrayPerDataPoint(i,j,1,dummy);
-         AliTOFDCSmaps *object = new AliTOFDCSmaps(999999,dummy);
-         InsertHVDataPoint(object);
-       }
-      }
+    AliInfo("Valid HV dps not found. By default all HV TOF channels (except the ones in the PHOS holes) switched ON, at SOR.");
+    if (InsertHVDataPoint(fStartingHVmap)!=0) return kTRUE; // to be verified
+    /*
+    AliTOFDCSmaps *object = new AliTOFDCSmaps((Int_t)(TMath::Power(2,31)-1),fStartingHVmap->GetArray());
+    if (InsertHVDataPoint(object)!=0) return kTRUE; // to be verified
+    */
   }
-
+  /*
+  else if (fNumberOfHVdataPoints==1) {
+    AliInfo(Form("Only one valid HV dp found (time=%d). This dp will be replicated at EOR (%d).",fHVDataPoints[0]->GetTime(),fEndTimeDCSQuery));
+    AliTOFDCSmaps *object = new AliTOFDCSmaps((Int_t)(TMath::Power(2,31)-1),fHVDataPoints[0]->GetArray());
+    if (InsertHVDataPoint(object)!=0) return kTRUE; // to be verified
+  }
+  */
   return kTRUE;
 
 }
@@ -448,7 +471,7 @@ Bool_t AliTOFLvHvDataPoints::ReadLVDataPoints(TMap& aliasMap) {
   TObjArray *aliasArr;
   AliDCSValue* aValue;
   AliDCSValue* aValuePrev;
-  UInt_t val = 0;
+  Int_t val = 0;
   Int_t time = 0;
   Int_t nEntries = 0;
 
@@ -468,6 +491,8 @@ Bool_t AliTOFLvHvDataPoints::ReadLVDataPoints(TMap& aliasMap) {
 
     nEntries = aliasArr->GetEntries();
     
+    if (nEntries<2) AliDebug(1, Form(" NB: number of values for dp %s %d (less than 2)",fAliasNamesXLVmap[i].Data(),nEntries));
+    
     if (nEntries==0) {
       AliError(Form("Alias %s has no entries! Nothing will be stored",
                    fAliasNamesXLVmap[i].Data()));
@@ -475,46 +500,49 @@ Bool_t AliTOFLvHvDataPoints::ReadLVDataPoints(TMap& aliasMap) {
     }
     else {
 
-      for (Int_t iEntry=0; iEntry<nEntries; iEntry++) {
+      // read the first value
+      for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
+      aValue = (AliDCSValue*) aliasArr->At(0);
+      val = aValue->GetInt();
+      time = aValue->GetTimeStamp();
+      AliDebug(1, Form(" at t=%d,1st value for dp %s = %d", time, fAliasNamesXLVmap[i].Data(), val));
+      FillLVarrayPerDataPoint(i,val,dummy);
+      AliTOFDCSmaps *object0 = new AliTOFDCSmaps(time,dummy);
+      if (InsertLVDataPoint(object0)!=0) return kTRUE; // to be verified
+
+      // read the values from the second one
+      for (Int_t iEntry=1; iEntry<nEntries; iEntry++) {
        for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
        aValue = (AliDCSValue*) aliasArr->At(iEntry);
-       val = aValue->GetUInt();
+       val = aValue->GetInt();
        time = aValue->GetTimeStamp();
-       if (iEntry==0 || iEntry==nEntries-1) {
+       AliDebug(1, Form(" at t=%d,%dth value for dp %s = %d", time, iEntry+1, fAliasNamesXLVmap[i].Data(), val));
+       aValuePrev = (AliDCSValue*) aliasArr->At(iEntry-1);
+       if (aValuePrev->GetInt()!=val) {
          FillLVarrayPerDataPoint(i,val,dummy);
          AliTOFDCSmaps *object = new AliTOFDCSmaps(time,dummy);
-         InsertLVDataPoint(object);
-       }
-       else {
-         aValuePrev = (AliDCSValue*) aliasArr->At(iEntry-1);
-         if (aValuePrev->GetUInt()!=val) {
-           FillLVarrayPerDataPoint(i,val,dummy);
-           AliTOFDCSmaps *object = new AliTOFDCSmaps(time,dummy);
-           InsertLVDataPoint(object);
-         }
+         if (InsertLVDataPoint(object)!=0) return kTRUE; // to be verified
        }
+
       }
     }
   }
 
   if (fNumberOfLVdataPoints==0) {
-    AliInfo("Valid LV dps not found. By default all LV TOF channels switched ON.");
-    for (int i=0; i<kNddl; i++) {
-      for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
-      FillLVarrayPerDataPoint(i,0,dummy);
-      AliTOFDCSmaps *object = new AliTOFDCSmaps(0,dummy);
-      InsertLVDataPoint(object);
-    }
-
-    for (int i=0; i<kNddl; i++) {
-      for (Int_t iBin=0; iBin<kNpads; iBin++) dummy[iBin]=-1;
-      FillLVarrayPerDataPoint(i,0,dummy);
-      AliTOFDCSmaps *object = new AliTOFDCSmaps(999999,dummy);
-      InsertLVDataPoint(object);
-    }
-
+    AliInfo("Valid LV dps not found. By default all LV TOF channels switched ON, at SOR.");
+    if (InsertLVDataPoint(fStartingLVmap)!=0) return kTRUE; // to be verified
+    /*
+    AliTOFDCSmaps *object = new AliTOFDCSmaps((Int_t)(TMath::Power(2,31)-1),fStartingHVmap->GetArray());
+    if (InsertLVDataPoint(object)!=0) return kTRUE; // to be verified
+    */
   }
-
+  /*
+  else if (fNumberOfLVdataPoints==1) {
+    AliInfo(Form("Only one valid LV dp found (time=%d). This dp will be replicated at EOR (%d).",fLVDataPoints[0]->GetTime(),fEndTimeDCSQuery));
+    AliTOFDCSmaps *object = new AliTOFDCSmaps((Int_t)(TMath::Power(2,31)-1),fLVDataPoints[0]->GetArray());
+    if (InsertLVDataPoint(object)!=0) return kTRUE; // to be verified
+  }
+  */
   return kTRUE;
 
 }
@@ -646,10 +674,25 @@ void AliTOFLvHvDataPoints::Init(){
     fAliasNamesXLVmap[i] += sindex;
   }
 
+  fStartingLVmap->SetTime(0);
+  for (Int_t iPad=0; iPad<kNpads; iPad++)
+    fStartingLVmap->SetCellValue(iPad,1);
+
+  fStartingHVmap->SetTime(0);
+  for (Int_t iPad=0; iPad<kNpads; iPad++) {
+    Int_t vol[5] = {-1,-1,-1,-1,-1};
+    AliTOFGeometry::GetVolumeIndices(iPad,vol);
+    if ( (vol[0]==13 || vol[0]==14 || vol[0]==15) &&
+        vol[1]==2)
+      fStartingHVmap->SetCellValue(iPad,0);
+    else
+      fStartingHVmap->SetCellValue(iPad,1);
+  }
+
 }
 
 //---------------------------------------------------------------
-void AliTOFLvHvDataPoints::FillHVarrayPerDataPoint(Int_t sector, Int_t plate, UInt_t baseWord, Short_t *array)
+void AliTOFLvHvDataPoints::FillHVarrayPerDataPoint(Int_t sector, Int_t plate, UInt_t baseWord, Short_t *array) const
 {
   //
   // Set the status of the TOF pads connected to the HV dp
@@ -677,7 +720,7 @@ void AliTOFLvHvDataPoints::FillHVarrayPerDataPoint(Int_t sector, Int_t plate, UI
 }
 
 //---------------------------------------------------------------
-void AliTOFLvHvDataPoints::FillLVarrayPerDataPoint(Int_t nDDL, UInt_t baseWord, Short_t *array)
+void AliTOFLvHvDataPoints::FillLVarrayPerDataPoint(Int_t nDDL, UInt_t baseWord, Short_t *array) const 
 {
   //
   // Set the status of the TOF pads connected to the LV dp
@@ -720,7 +763,7 @@ void AliTOFLvHvDataPoints::FillLVarrayPerDataPoint(Int_t nDDL, UInt_t baseWord,
 }
 
 //---------------------------------------------------------------
-void AliTOFLvHvDataPoints::GetStripsConnectedToFEAC(Int_t nDDL, Int_t nFEAC, Int_t *iStrip, Int_t &firstPadX, Int_t &lastPadX)
+void AliTOFLvHvDataPoints::GetStripsConnectedToFEAC(Int_t nDDL, Int_t nFEAC, Int_t *iStrip, Int_t &firstPadX, Int_t &lastPadX) const
 {
   //
   // FEAC-strip mapping:
@@ -933,7 +976,7 @@ AliTOFDCSmaps *AliTOFLvHvDataPoints::GetHVandLVmapAtEOR()
 
   AliTOFDCSmaps * lvANDhvMap = 0;
 
-  if (fNumberOfHVandLVmaps==2) { // nothing changed during the run
+  if (fNumberOfHVandLVmaps<=2) { // nothing changed during the run
 
     lvANDhvMap = fMap[fNumberOfHVandLVmaps-1];