ALIROOT-5780 o Check that scaler time is withing the GRP start and stop time - issue...
authorwiechula <Jens.Wiechula@cern.ch>
Thu, 12 Feb 2015 17:04:39 +0000 (18:04 +0100)
committermivanov <marian.ivanov@cern.ch>
Sat, 14 Feb 2015 12:49:07 +0000 (13:49 +0100)
TPC/TPCbase/AliTPCcalibDB.cxx

index d4adef3..635feb0 100644 (file)
@@ -145,7 +145,7 @@ AliTPCcalibDB* AliTPCcalibDB::Instance()
 
   if (fgInstance == 0)
     fgInstance = new AliTPCcalibDB();
-  
+
   return fgInstance;
 }
 
@@ -156,7 +156,7 @@ void AliTPCcalibDB::Terminate()
   /// This function can be called several times.
 
   fgTerminated = kTRUE;
-  
+
   if (fgInstance != 0)
   {
     delete fgInstance;
@@ -201,7 +201,7 @@ AliTPCcalibDB::AliTPCcalibDB():
   fTemperatureArray(1),    //! array of temperature sensors - per run - Just for calibration studies
   fVdriftArray(1),                 //! array of v drift interfaces
   fDriftCorrectionArray(1),  //! array of drift correction
-  fRunList(1),              //! run list - indicates try to get the run param 
+  fRunList(1),              //! run list - indicates try to get the run param
   fBHasAlignmentOCDB(kFALSE),    // Flag  - has the alignment on the composed correction ?
   fDButil(0),
   fCTPTimeParams(0),
@@ -263,7 +263,7 @@ AliTPCcalibDB::AliTPCcalibDB(const AliTPCcalibDB& ):
   fTemperatureArray(0),   //! array of temperature sensors - per run - Just for calibration studies
   fVdriftArray(0),         //! array of v drift interfaces
   fDriftCorrectionArray(0), //! array of v drift corrections
-  fRunList(0),              //! run list - indicates try to get the run param 
+  fRunList(0),              //! run list - indicates try to get the run param
   fBHasAlignmentOCDB(kFALSE),    // Flag  - has the alignment on the composed correction ?
   fDButil(0),
   fCTPTimeParams(0),
@@ -299,7 +299,7 @@ AliTPCcalibDB& AliTPCcalibDB::operator= (const AliTPCcalibDB& )
 
 
 //_____________________________________________________________________________
-AliTPCcalibDB::~AliTPCcalibDB() 
+AliTPCcalibDB::~AliTPCcalibDB()
 {
   /// destructor
   ///
@@ -326,13 +326,13 @@ AliCDBEntry* AliTPCcalibDB::GetCDBEntry(const char* cdbPath)
   /// Retrieves an entry with path <cdbPath> from the CDB.
 
   char chinfo[1000];
-    
-  AliCDBEntry* entry = AliCDBManager::Instance()->Get(cdbPath, fRun); 
-  if (!entry) 
-  { 
+
+  AliCDBEntry* entry = AliCDBManager::Instance()->Get(cdbPath, fRun);
+  if (!entry)
+  {
     snprintf(chinfo,1000,"AliTPCcalibDB: Failed to get entry:\t%s ", cdbPath);
-    AliError(chinfo); 
-    return 0; 
+    AliError(chinfo);
+    return 0;
   }
   return entry;
 }
@@ -344,11 +344,11 @@ void AliTPCcalibDB::SetRun(Long64_t run)
   /// Sets current run number. Calibration data is read from the corresponding file.
 
   if (fRun == run)
-    return;  
+    return;
        fRun = run;
   Update();
 }
-  
+
 
 
 void AliTPCcalibDB::Update(){
@@ -357,7 +357,7 @@ void AliTPCcalibDB::Update(){
   AliCDBEntry * entry=0;
   Bool_t cdbCache = AliCDBManager::Instance()->GetCacheFlag(); // save cache status
   AliCDBManager::Instance()->SetCacheFlag(kTRUE); // activate CDB cache
-  fDButil = new AliTPCcalibDButil;   
+  fDButil = new AliTPCcalibDButil;
   //
   fRun = AliCDBManager::Instance()->GetRun();
 
@@ -466,14 +466,14 @@ void AliTPCcalibDB::Update(){
   }else{
     AliFatal("TPC - Missing calibration entry");
   }
-  
+
   //Calibration Pulser data
   entry          = GetCDBEntry("TPC/Calib/Pulser");
   if (entry){
     entry->SetOwner(kTRUE);
     fPulserData=(TObjArray*)(entry->GetObject());
   }
-  
+
   //Calibration ION tail data
   entry          = GetCDBEntry("TPC/Calib/IonTail");
   if (entry){
@@ -482,7 +482,7 @@ void AliTPCcalibDB::Update(){
      fIonTailArray=(TObjArray*)(entry->GetObject());
      fIonTailArray->SetOwner(); //own the keys
   }
-  
+
   //CE data
   entry          = GetCDBEntry("TPC/Calib/CE");
   if (entry){
@@ -512,7 +512,7 @@ void AliTPCcalibDB::Update(){
     fCTPTimeParams=dynamic_cast<AliCTPTimeParams*>(entry->GetObject());
   }else{
     AliError("TPC - Missing calibration entry");
-  }  
+  }
   //TPC space point correction data
   entry          = GetCDBEntry("TPC/Calib/Correction");
   if (entry){
@@ -532,22 +532,22 @@ void AliTPCcalibDB::Update(){
          }
        }
       }
-    }  
+    }
   }else{
     AliError("TPC - Missing calibration entry-  TPC/Calib/Correction");
-  } 
+  }
   //RCU trigger config mode
   fMode=GetRCUTriggerConfig();
   //
   if (!fTransform) {
-    fTransform=new AliTPCTransform(); 
+    fTransform=new AliTPCTransform();
     fTransform->SetCurrentRun(AliCDBManager::Instance()->GetRun());
   }
 
   // Chamber HV data
   // needs to be called before InitDeadMap
   UpdateChamberHighVoltageData();
-  
+
   // Create Dead Channel Map
   InitDeadMap();
 
@@ -586,7 +586,7 @@ void AliTPCcalibDB::UpdateNonRec(){
 }
 
 Bool_t AliTPCcalibDB::GetTailcancelationGraphs(Int_t sector, TGraphErrors ** graphRes, Float_t * indexAmpGraphs){
+
 ///   Read OCDB entry object of Iontail (TObjArray of TGraphErrors of TRFs)
 ///   Naming of the TRF objects is: "gr_<chamber_type>_<voltage>_<laser_track_angle>_<distance_to_COG>" --> "gr_iroc_1240_1_1"
 
@@ -594,7 +594,7 @@ Bool_t AliTPCcalibDB::GetTailcancelationGraphs(Int_t sector, TGraphErrors ** gra
   //SetRun(run);
   //Float_t rocVoltage = GetChamberHighVoltage(run,sector, -1);      // Get the voltage from OCDB with a getter (old function)
 //   Float_t rocVoltage=GetChamberHighVoltageMedian(sector);                      // Get the voltage from OCDB, new function from Jens
+
   Int_t nominalVoltage = (sector<36) ? 1240 : 1470 ;     // nominal voltage of 2012 when the TRF functions were produced
 
   Float_t rocVoltage = nominalVoltage;
@@ -605,37 +605,37 @@ Bool_t AliTPCcalibDB::GetTailcancelationGraphs(Int_t sector, TGraphErrors ** gra
     return kFALSE;
   }
 
-  Int_t tempVoltage = 0;                                 
+  Int_t tempVoltage = 0;
   Int_t trackAngle  = 4;                                 // (1=first, 2=second, 3=third, 4=first+second, 5=all tracks) note: 3rd is distorted by low freq
-  TString rocType   = (sector<36) ? "iroc" : "oroc";     
+  TString rocType   = (sector<36) ? "iroc" : "oroc";
   const Int_t ngraph=fIonTailArray->GetLast();
-  
-  // create array of voltages in order to select the proper TRF with closest voltage  
+
+  // create array of voltages in order to select the proper TRF with closest voltage
   Int_t voltages[ngraph];     // array of voltages
   for (Int_t i=0; i<ngraph; i++){
     voltages[i]=0;
   }
-    
+
   // loop over response functions in the TObjarray
   Int_t nvoltages=0;
   for (Int_t i=0;i<=ngraph;i++){
-    
+
     // read the TRF object name in order to select proper TRF for the given sector
     TString objname(fIonTailArray->At(i)->GetName());
     if (!objname.Contains(rocType)) continue;
 
     TObjArray *objArr = objname.Tokenize("_");
-    
+
     // select the roc type (IROC or OROC) and the trackAngle
     if ( atoi(static_cast<TObjString*>(objArr->At(3))->GetName())==trackAngle )
-    { 
+    {
       // Create the voltage array for proper voltage value selection
       voltages[nvoltages]=atoi(static_cast<TObjString*>(objArr->At(2))->GetName());
       nvoltages++;
     }
     delete objArr;
   }
-    
+
   // find closest voltage value to ROC voltage (among the TRF' voltage array --> to select proper t.r.f.)
   Int_t ampIndex     = 0;
   Int_t diffVoltage  = TMath::Abs(rocVoltage - voltages[0]);
@@ -644,22 +644,22 @@ Bool_t AliTPCcalibDB::GetTailcancelationGraphs(Int_t sector, TGraphErrors ** gra
       {
         diffVoltage    = TMath::Abs(rocVoltage-voltages[k]);
         ampIndex   = k;
-      }     
+      }
   }
   tempVoltage = voltages[ampIndex];    // use closest voltage to current voltage
   //if (run<140000) tempVoltage = nominalVoltage;    // for 2010 data
-  
-  // assign TGraphErrors   
+
+  // assign TGraphErrors
   Int_t igraph=0;
   for (Int_t i=0; i<=ngraph; i++){
-   
+
     // read TRFs for TObjArray and select the roc type (IROC or OROC) and the trackAngle
     TGraphErrors * trfObj = static_cast<TGraphErrors*>(fIonTailArray->At(i));
     TString objname(trfObj->GetName());
     if (!objname.Contains(rocType)) continue; //choose ROC type
-    
+
     TObjArray *objArr1 = objname.Tokenize("_");
-     
+
     // TRF eleminations
     TObjString* angleString = static_cast<TObjString*>(objArr1->At(3));
     TObjString* voltageString = static_cast<TObjString*>(objArr1->At(2));
@@ -670,13 +670,13 @@ Bool_t AliTPCcalibDB::GetTailcancelationGraphs(Int_t sector, TGraphErrors ** gra
       Int_t voltage       = atoi(voltageString->GetName());
       Double_t voltageScaled = 1;
       if (rocVoltage>0)  voltageScaled = Double_t(voltage)/Double_t(rocVoltage); // for jens how it can happen that we have clusters at 0 HV ?
-      const Int_t nScaled          = TMath::Nint(voltageScaled*trfObj->GetN())-1; 
+      const Int_t nScaled          = TMath::Nint(voltageScaled*trfObj->GetN())-1;
       Double_t x;
       Double_t y;
-      
+
       delete graphRes[igraph];
       graphRes[igraph]       = new TGraphErrors(nScaled);
-      
+
       for (Int_t j=0; j<nScaled; j++){
         x = TMath::Nint(j*(voltageScaled));
         y = (j<trfObj->GetN()) ? (1./voltageScaled)*trfObj->GetY()[j] : 0.;
@@ -686,7 +686,7 @@ Bool_t AliTPCcalibDB::GetTailcancelationGraphs(Int_t sector, TGraphErrors ** gra
       // fill arrays for proper position and amplitude selections
       TObjString* distanceToCenterOfGravity = static_cast<TObjString*>(objArr1->At(4));
       indexAmpGraphs[igraph] = (distanceToCenterOfGravity->GetString().Atof())/10.;
-      // smooth voltage scaled graph 
+      // smooth voltage scaled graph
       for (Int_t m=1; m<nScaled;m++){
         if (graphRes[igraph]->GetY()[m]==0) graphRes[igraph]->GetY()[m] = graphRes[igraph]->GetY()[m-1];
       }
@@ -708,23 +708,23 @@ void AliTPCcalibDB::CreateObjectList(const Char_t *filename, TObjArray *calibObj
       fprintf(stderr,"Error: cannot open list file '%s'", filename);
       return;
    }
-   
+
    AliTPCCalPad *calPad=0x0;
-   
+
    TString sFile;
    sFile.ReadFile(in);
    in.close();
-   
+
    TObjArray *arrFileLine = sFile.Tokenize("\n");
-   
+
    TIter nextLine(arrFileLine);
-   
+
    TObjString *sObjLine=0x0;
    while ( (sObjLine = (TObjString*)nextLine()) ){
       TString sLine(sObjLine->GetString());
-      
+
       TObjArray *arrNextCol = sLine.Tokenize("\t");
-      
+
       TObjString *sObjType     = (TObjString*)(arrNextCol->At(0));
       TObjString *sObjFileName = (TObjString*)(arrNextCol->At(1));
       delete arrNextCol;
@@ -733,57 +733,57 @@ void AliTPCcalibDB::CreateObjectList(const Char_t *filename, TObjArray *calibObj
       TString sType(sObjType->GetString());
       TString sFileName(sObjFileName->GetString());
 //       printf("%s\t%s\n",sType.Data(),sFileName.Data());
-      
+
       TFile *fIn = TFile::Open(sFileName);
       if ( !fIn ){
          fprintf(stderr,"File not found: '%s'", sFileName.Data());
          continue;
       }
-      
+
       if ( sType == "CE" ){
          AliTPCCalibCE *ce = (AliTPCCalibCE*)fIn->Get("AliTPCCalibCE");
-         
-         calPad = new AliTPCCalPad((TObjArray*)ce->GetCalPadT0());         
+
+         calPad = new AliTPCCalPad((TObjArray*)ce->GetCalPadT0());
          calPad->SetNameTitle("CETmean","CETmean");
          calibObjects->Add(calPad);
-         
-         calPad = new AliTPCCalPad((TObjArray*)ce->GetCalPadQ());         
+
+         calPad = new AliTPCCalPad((TObjArray*)ce->GetCalPadQ());
          calPad->SetNameTitle("CEQmean","CEQmean");
-         calibObjects->Add(calPad);        
-         
+         calibObjects->Add(calPad);
+
          calPad = new AliTPCCalPad((TObjArray*)ce->GetCalPadRMS());
          calPad->SetNameTitle("CETrms","CETrms");
-         calibObjects->Add(calPad);         
-                  
+         calibObjects->Add(calPad);
+
       } else if ( sType == "Pulser") {
          AliTPCCalibPulser *sig = (AliTPCCalibPulser*)fIn->Get("AliTPCCalibPulser");
-         
-         calPad = new AliTPCCalPad((TObjArray*)sig->GetCalPadT0());         
+
+         calPad = new AliTPCCalPad((TObjArray*)sig->GetCalPadT0());
          calPad->SetNameTitle("PulserTmean","PulserTmean");
          calibObjects->Add(calPad);
-         
-         calPad = new AliTPCCalPad((TObjArray*)sig->GetCalPadQ());         
+
+         calPad = new AliTPCCalPad((TObjArray*)sig->GetCalPadQ());
          calPad->SetNameTitle("PulserQmean","PulserQmean");
-         calibObjects->Add(calPad);        
-         
+         calibObjects->Add(calPad);
+
          calPad = new AliTPCCalPad((TObjArray*)sig->GetCalPadRMS());
          calPad->SetNameTitle("PulserTrms","PulserTrms");
-         calibObjects->Add(calPad);         
-      
+         calibObjects->Add(calPad);
+
       } else if ( sType == "Pedestals") {
          AliTPCCalibPedestal *ped = (AliTPCCalibPedestal*)fIn->Get("AliTPCCalibPedestal");
-         
-         calPad = new AliTPCCalPad((TObjArray*)ped->GetCalPadPedestal());         
+
+         calPad = new AliTPCCalPad((TObjArray*)ped->GetCalPadPedestal());
          calPad->SetNameTitle("Pedestals","Pedestals");
          calibObjects->Add(calPad);
-         
-         calPad = new AliTPCCalPad((TObjArray*)ped->GetCalPadRMS());         
+
+         calPad = new AliTPCCalPad((TObjArray*)ped->GetCalPadRMS());
          calPad->SetNameTitle("Noise","Noise");
-         calibObjects->Add(calPad);        
-     
+         calibObjects->Add(calPad);
+
       } else {
          fprintf(stderr,"Undefined Type: '%s'",sType.Data());
-         
+
       }
       delete fIn;
    }
@@ -811,7 +811,7 @@ Int_t AliTPCcalibDB::InitDeadMap() {
     AliError("All necessary information to create the activate channel are map missing.");
     return 0;
   }
-  
+
   //=============================================================
   // Setup DDL map
 
@@ -837,24 +837,26 @@ Int_t AliTPCcalibDB::InitDeadMap() {
   AliTPCmapper map(gSystem->ExpandPathName("$ALICE_ROOT/TPC/mapping/"));
 
   if (!altroMap) AliError("ALTRO dead channel map missing. ActiveChannelMap can only be created with parts of the information.");
-  
+
   for (Int_t iROC=0;iROC<AliTPCCalPad::kNsec;++iROC){
     AliTPCCalROC *roc=fActiveChannelMap->GetCalROC(iROC);
     if (!roc){
       AliError(Form("No ROC %d in active channel map",iROC));
       continue;
     }
-    
+
     // check for bad voltage
     // see UpdateChamberHighVoltageData()
     if (!fChamberHVStatus[iROC]){
       roc->Multiply(0.);
+      AliInfo(Form("Turning off all channels of ROC %2d due to a bad HV status", iROC));
       continue;
     }
-    
+
     AliTPCCalROC *masked=0x0;
     if (altroMap) masked=altroMap->GetCalROC(iROC);
-    
+
+    Int_t numberOfDeactivatedChannels=0;
     for (UInt_t irow=0; irow<roc->GetNrows(); ++irow){
       for (UInt_t ipad=0; ipad<roc->GetNPads(irow); ++ipad){
         //per default the channel is on
@@ -864,10 +866,19 @@ Int_t AliTPCcalibDB::InitDeadMap() {
         // mask channels if a DDL is inactive
         Int_t ddlId=map.GetEquipmentID(iROC, irow, ipad)-768;
         if (ddlId>=0 && !ddlMap[ddlId]) roc->SetValue(irow, ipad ,0);
+
+        if (roc->GetValue(irow, ipad)<0.0001) {
+          ++numberOfDeactivatedChannels;
+        }
       }
     }
+
+    if (numberOfDeactivatedChannels>0) {
+      AliInfo(Form("Deactivated %4d channels in ROC %2d due to altro and DDL map states",
+                   numberOfDeactivatedChannels, iROC));
+    }
   }
-  
+
   return 1;
 }
 
@@ -885,17 +896,17 @@ void AliTPCcalibDB::MakeTree(const char * fileName, TObjArray * array, const cha
    TVectorF *mapOROCArray = 0;
    Int_t mapEntries = 0;
    TString* mapNames = 0;
-   
+
    if (mapFileName) {
       TFile mapFile(mapFileName, "read");
-      
+
       TList* listOfROCs = mapFile.GetListOfKeys();
       mapEntries = listOfROCs->GetEntries()/2;
       mapIROCs = new TObjArray(mapEntries*2);
       mapOROCs = new TObjArray(mapEntries*2);
       mapIROCArray = new TVectorF[mapEntries];
       mapOROCArray = new TVectorF[mapEntries];
-      
+
       mapNames = new TString[mapEntries];
       for (Int_t ivalue = 0; ivalue < mapEntries; ivalue++) {
        TString nameROC(((TKey*)(listOfROCs->At(ivalue*2)))->GetName());
@@ -904,11 +915,11 @@ void AliTPCcalibDB::MakeTree(const char * fileName, TObjArray * array, const cha
          mapOROCs->AddAt((AliTPCCalROC*)mapFile.Get((nameROC + "OROC").Data()), ivalue);
          mapNames[ivalue].Append(nameROC);
       }
-      
+
       for (Int_t ivalue = 0; ivalue < mapEntries; ivalue++) {
          mapIROCArray[ivalue].ResizeTo(tpcROCinstance->GetNChannels(0));
          mapOROCArray[ivalue].ResizeTo(tpcROCinstance->GetNChannels(36));
-      
+
          for (UInt_t ichannel = 0; ichannel < tpcROCinstance->GetNChannels(0); ichannel++)
             (mapIROCArray[ivalue])[ichannel] = ((AliTPCCalROC*)(mapIROCs->At(ivalue)))->GetValue(ichannel);
          for (UInt_t ichannel = 0; ichannel < tpcROCinstance->GetNChannels(36); ichannel++)
@@ -916,10 +927,10 @@ void AliTPCcalibDB::MakeTree(const char * fileName, TObjArray * array, const cha
       }
 
    } //  if (mapFileName)
-  
+
    TTreeSRedirector cstream(fileName);
    Int_t arrayEntries = array->GetEntries();
-   
+
    TString* names = new TString[arrayEntries];
    for (Int_t ivalue = 0; ivalue < arrayEntries; ivalue++)
       names[ivalue].Append(((AliTPCCalPad*)array->At(ivalue))->GetName());
@@ -938,11 +949,11 @@ void AliTPCcalibDB::MakeTree(const char * fileName, TObjArray * array, const cha
       TVectorF rmsWithOut(arrayEntries);
       TVectorF ltmWithOut(arrayEntries);
       TVectorF ltmrmsWithOut(arrayEntries);
-      
+
       TVectorF *vectorArray = new TVectorF[arrayEntries];
       for (Int_t ivalue = 0; ivalue < arrayEntries; ivalue++)
          vectorArray[ivalue].ResizeTo(tpcROCinstance->GetNChannels(isector));
-      
+
       for (Int_t ivalue = 0; ivalue < arrayEntries; ivalue++) {
          AliTPCCalPad* calPad = (AliTPCCalPad*) array->At(ivalue);
          AliTPCCalROC* calROC = calPad->GetCalROC(isector);
@@ -977,7 +988,7 @@ void AliTPCcalibDB::MakeTree(const char * fileName, TObjArray * array, const cha
             ltmrmsWithOut[ivalue] = 0.;
          }
       }
-      
+
       //
       // fill vectors of variable per pad
       //
@@ -1000,7 +1011,7 @@ void AliTPCcalibDB::MakeTree(const char * fileName, TObjArray * array, const cha
             posArray[5][ichannel] = posG[1];
             posArray[6][ichannel] = (Int_t)(ipad - (Double_t)(tpcROCinstance->GetNPads(isector, irow))/2);
             posArray[7][ichannel] = ichannel;
-            
+
             // loop over array containing AliTPCCalPads
             for (Int_t ivalue = 0; ivalue < arrayEntries; ivalue++) {
                AliTPCCalPad* calPad = (AliTPCCalPad*) array->At(ivalue);
@@ -1013,10 +1024,10 @@ void AliTPCcalibDB::MakeTree(const char * fileName, TObjArray * array, const cha
             ichannel++;
          }
       }
-      
+
       cstream << "calPads" <<
          "sector=" << isector;
-      
+
       for  (Int_t ivalue = 0; ivalue < arrayEntries; ivalue++) {
          cstream << "calPads" <<
             (Char_t*)((names[ivalue] + "_Median=").Data()) << median[ivalue] <<
@@ -1059,14 +1070,14 @@ void AliTPCcalibDB::MakeTree(const char * fileName, TObjArray * array, const cha
          "gy.=" << &posArray[5] <<
          "rpad.=" << &posArray[6] <<
          "channel.=" << &posArray[7];
-         
+
       cstream << "calPads" <<
          "\n";
 
       delete[] posArray;
       delete[] vectorArray;
    }
-   
+
 
    delete[] names;
    if (mapFileName) {
@@ -1096,7 +1107,7 @@ Int_t AliTPCcalibDB::GetRCUTriggerConfig() const
   return (Int_t)mode;
 }
 
-Bool_t AliTPCcalibDB::IsTrgL0() 
+Bool_t AliTPCcalibDB::IsTrgL0()
 {
   /// return if the FEE readout was triggered on L0
 
@@ -1120,12 +1131,12 @@ void AliTPCcalibDB::RegisterExB(Int_t index, Float_t bz, Bool_t bdelete){
   //  Float_t factor =  bz/(-5.);  // default b filed in Cheb with minus sign
   Float_t factor =  bz/(5.);  // default b filed in Cheb with minus sign
                               // was chenged in the Revision ???? (Ruben can you add here number)
-  
+
   AliMagF*   bmap = new AliMagF("MapsExB","MapsExB", factor,TMath::Sign(1.f,factor),AliMagF::k5kG);
-  
+
   AliTPCExBFirst *exb  = new  AliTPCExBFirst(bmap,0.88*2.6400e+04,50,50,50);
   AliTPCExB::SetInstance(exb);
-  
+
   if (bdelete){
     delete bmap;
   }else{
@@ -1192,7 +1203,7 @@ void AliTPCcalibDB::UpdateRunInformations( Int_t run, Bool_t force){
     if (!grpRun){
       TMap* map = dynamic_cast<TMap*>(entry->GetObject());
       if (map){
-       //grpRun = new AliGRPObject; 
+       //grpRun = new AliGRPObject;
        //grpRun->ReadValuesFromMap(map);
        grpRun =  MakeGRPObjectFromMap(map);
 
@@ -1206,7 +1217,7 @@ void AliTPCcalibDB::UpdateRunInformations( Int_t run, Bool_t force){
     fGoofieArray.Add(new TObjString(runstr),entry->GetObject());
   }
   //
-  
+
   //
   entry = AliCDBManager::Instance()->Get("TPC/Calib/TimeGain",run);
   if (entry)  {
@@ -1217,8 +1228,8 @@ void AliTPCcalibDB::UpdateRunInformations( Int_t run, Bool_t force){
   //
   entry = AliCDBManager::Instance()->Get("TPC/Calib/TimeDrift",run);
   if (entry)  {
-    TObjArray * timeArray = (TObjArray*)entry->GetObject();    
-    fDriftCorrectionArray.Add(new TObjString(runstr),entry->GetObject());  
+    TObjArray * timeArray = (TObjArray*)entry->GetObject();
+    fDriftCorrectionArray.Add(new TObjString(runstr),entry->GetObject());
     AliTPCCorrection * correctionTime = (AliTPCCorrection *)timeArray->FindObject("FitCorrectionTime");
     if (correctionTime && fComposedCorrectionArray){
       correctionTime->Init();
@@ -1309,7 +1320,7 @@ AliGRPObject *AliTPCcalibDB::GetGRP(Int_t run){
   if (!grpRun) {
     Instance()->UpdateRunInformations(run);
     grpRun = dynamic_cast<AliGRPObject *>(Instance()->fGRPArray.GetValue(Form("%i",run)));
-    if (!grpRun) return 0; 
+    if (!grpRun) return 0;
   }
   return grpRun;
 }
@@ -1321,7 +1332,7 @@ TMap *  AliTPCcalibDB::GetGRPMap(Int_t run){
   if (!grpRun) {
     Instance()->UpdateRunInformations(run);
     grpRun = dynamic_cast<TMap *>(Instance()->fGRPMaps.GetValue(Form("%i",run)));
-    if (!grpRun) return 0; 
+    if (!grpRun) return 0;
   }
   return grpRun;
 }
@@ -1335,27 +1346,27 @@ AliDCSSensor * AliTPCcalibDB::GetPressureSensor(Int_t run, Int_t type){
   /// First try to get if trom map - if existing  (Old format of data storing)
 
 
-  TMap *map = GetGRPMap(run);  
+  TMap *map = GetGRPMap(run);
   if (map){
     AliDCSSensor * sensor = 0;
     TObject *osensor=0;
     if (type==0) osensor = ((*map)("fCavernPressure"));
     if (type==1) osensor = ((*map)("fP2Pressure"));
-    sensor =dynamic_cast<AliDCSSensor *>(osensor); 
+    sensor =dynamic_cast<AliDCSSensor *>(osensor);
     if (sensor) return sensor;
   }
   //
   // If not map try to get it from the GRPObject
   //
-  AliGRPObject * grpRun = dynamic_cast<AliGRPObject *>(fGRPArray.GetValue(Form("%i",run))); 
+  AliGRPObject * grpRun = dynamic_cast<AliGRPObject *>(fGRPArray.GetValue(Form("%i",run)));
   if (!grpRun) {
     UpdateRunInformations(run);
     grpRun = dynamic_cast<AliGRPObject *>(fGRPArray.GetValue(Form("%i",run)));
-    if (!grpRun) return 0; 
+    if (!grpRun) return 0;
   }
   AliDCSSensor * sensor = grpRun->GetCavernAtmosPressure();
   if (type==1) sensor = grpRun->GetSurfaceAtmosPressure();
-  return sensor; 
+  return sensor;
 }
 
 AliTPCSensorTempArray * AliTPCcalibDB::GetTemperatureSensor(Int_t run){
@@ -1454,7 +1465,7 @@ Float_t AliTPCcalibDB::GetCEdriftTime(Int_t run, Int_t sector, Double_t timeStam
   }
   return val;
 }
-  
+
 Float_t AliTPCcalibDB::GetCEchargeTime(Int_t run, Int_t sector, Double_t timeStamp, Int_t *entries)
 {
   /// GetCE mean charge for 'sector'
@@ -1568,7 +1579,7 @@ Bool_t AliTPCcalibDB::IsDataTakingActive(time_t timeStamp)
   Bool_t currentVal=fGrRunState->GetY()[currentPoint]>0.5;
   Bool_t retVal=currentVal;
   Double_t currentTime=fGrRunState->GetX()[currentPoint];
-  
+
   while (time>currentTime){
     retVal=currentVal;
     if (currentPoint==fGrRunState->GetN()) break;
@@ -1629,6 +1640,11 @@ void AliTPCcalibDB::UpdateChamberHighVoltageData()
   for (int i=0; i<npoints; i++) {
     AliTriggerScalersRecord *rec = (AliTriggerScalersRecord *) sca->GetScalersRecord(i);
     Double_t time = ((AliTimeStamp*) rec->GetTimeStamp())->GetSeconds();
+    // check if time is inside the grp times. For dummy scaler entries the time might be compatible with 0
+    if ( time<startTimeGRP || time>stopTimeGRP ){
+      AliWarning(Form("Time of scaler record %d: %.0f is outside the GRP times (%d, %d). Skipping this record.", i, time, startTimeGRP, stopTimeGRP));
+      continue;
+    }
     ULong64_t sum=0;
     for (int j=0; j<nchannels; j++) sum += ((AliTriggerScalers*) rec->GetTriggerScalers()->At(j))->GetL2CA();
     if (TMath::Abs(time-timeLast)<.001 && sum==lastSum ) continue;
@@ -1646,9 +1662,9 @@ void AliTPCcalibDB::UpdateChamberHighVoltageData()
   }
   fGrRunState->SetPoint(fGrRunState->GetN(),Double_t(stopTimeGRP),active);
   fGrRunState->SetPoint(fGrRunState->GetN(),Double_t(stopTimeGRP)+.001,0);
-  
-  
-  
+
+
+
   // reset all values
   for (Int_t iROC=0;iROC<72;++iROC) {
     fChamberHVmedian[iROC]       = -1;
@@ -1656,7 +1672,7 @@ void AliTPCcalibDB::UpdateChamberHighVoltageData()
     fCurrentNominalVoltage[iROC] = -999.;
     fChamberHVStatus[iROC]       = kFALSE;
   }
-  
+
   AliDCSSensorArray* voltageArray = GetVoltageSensors(run);
   if (!voltageArray) {
     AliError("Voltage Array missing. Cannot calculate HV information!");
@@ -1691,20 +1707,20 @@ void AliTPCcalibDB::UpdateChamberHighVoltageData()
     if (!sensor) continue;
 
     Int_t nPointsSampled=0;
-    
+
     TGraph *gr=sensor->GetGraph();
     if ( gr && gr->GetN()>1 ){
       //1. sample voltage over time
       //   get a robust median
       //   buffer sampled voltages
-      
+
       // current sampling time
       Int_t time=startTimeGRP;
-      
+
       // input graph sampling point
       const Int_t nGraph=gr->GetN();
       Int_t pointGraph=0;
-      
+
       //initialise graph information
       Int_t timeGraph=TMath::Nint(gr->GetX()[pointGraph+1]*3600+sensor->GetStartTime());
       Double_t sampledHV=gr->GetY()[pointGraph++];
@@ -1720,7 +1736,7 @@ void AliTPCcalibDB::UpdateChamberHighVoltageData()
       }
 
       if (nPointsSampled<1) continue;
-      
+
       fChamberHVmedian[iROC]=TMath::Median(nPointsSampled,vSampled);
       chamberMedianDeviation[iROC]=fChamberHVmedian[iROC]-fParam->GetNominalVoltage(iROC);
 
@@ -1745,11 +1761,11 @@ void AliTPCcalibDB::UpdateChamberHighVoltageData()
 
   delete [] vSampled;
   vSampled=0x0;
-  
+
   // get median deviation from all chambers (detect e.g. -50V)
   const Double_t medianIROC=TMath::Median( 36, chamberMedianDeviation );
   const Double_t medianOROC=TMath::Median( 36, chamberMedianDeviation+36 );
-  
+
   // Define current default voltages
   for (Int_t iROC=0;iROC<72/*AliTPCCalPad::kNsec*/;++iROC){
     const Float_t averageDeviation=(iROC<36)?medianIROC:medianOROC;
@@ -1759,15 +1775,33 @@ void AliTPCcalibDB::UpdateChamberHighVoltageData()
   //
   // Check HV status
   //
+  Int_t nbad=0;
   for (Int_t iROC=0;iROC<72/*AliTPCCalPad::kNsec*/;++iROC){
     fChamberHVStatus[iROC]=kTRUE;
 
     //a. Deviation of median from current nominal voltage
     //   allow larger than nominal voltages
-    if (fCurrentNominalVoltage[iROC]-fChamberHVmedian[iROC] >  maxVdiff) fChamberHVStatus[iROC]=kFALSE;
+    if (fCurrentNominalVoltage[iROC]-fChamberHVmedian[iROC] >  maxVdiff) {
+      AliInfo(Form("Low voltage detected for ROC %2d, current nominal voltage - median voltage: %.2f-%.2f>%.2f",
+                   iROC, fCurrentNominalVoltage[iROC],fChamberHVmedian[iROC],maxVdiff));
+      fChamberHVStatus[iROC]=kFALSE;
+    }
 
     //b. Fraction of bad hv values
-    if ( 1-fChamberHVgoodFraction[iROC] > maxFracHVbad ) fChamberHVStatus[iROC]=kFALSE;
+    if ( 1.-fChamberHVgoodFraction[iROC] > maxFracHVbad ) {
+      AliInfo(Form("Large fraction of low HV readings detected in ROC %2d: %.2f > %.2f",
+                   iROC, 1.-fChamberHVgoodFraction[iROC], maxFracHVbad));
+      fChamberHVStatus[iROC]=kFALSE;
+    }
+
+    if (!fChamberHVStatus[iROC]) {
+      ++nbad;
+    }
+  }
+
+  // check if all chamber are off
+  if (nbad==72) {
+    AliFatal("Something went wrong in the chamber HV status calculation. All chambers would be deactivated!");
   }
 }
 
@@ -1797,7 +1831,7 @@ Float_t AliTPCcalibDB::GetChamberHighVoltage(Int_t run, Int_t sector, Int_t time
       //OROC
       sensorName=Form("TPC_ANODE_O_%c%02d_0_IMEAS",sideName,sector%18);
     }
-    
+
   }
   if (timeStamp==-1){
     val=AliTPCcalibDB::GetDCSSensorMeanValue(voltageArray, sensorName.Data(),sigDigits);
@@ -2010,7 +2044,7 @@ Bool_t  AliTPCcalibDB::GetTemperatureFit(Int_t timeStamp, Int_t run, Int_t side,
   AliTPCTempMap * tempMap = new AliTPCTempMap(tempArray);
   TLinearFitter * fitter = tempMap->GetLinearFitter(3,side,tstamp);
   if (fitter){
-    fitter->Eval(); 
+    fitter->Eval();
     fitter->GetParameters(fit);
   }
   delete fitter;
@@ -2055,7 +2089,7 @@ AliGRPObject * AliTPCcalibDB::MakeGRPObjectFromMap(TMap *map){
   AliDCSSensor * sensor = 0;
   TObject *osensor=0;
   osensor = ((*map)("fP2Pressure"));
-  sensor  =dynamic_cast<AliDCSSensor *>(osensor); 
+  sensor  =dynamic_cast<AliDCSSensor *>(osensor);
   //
   if (!sensor) return 0;
   //
@@ -2068,9 +2102,9 @@ AliGRPObject * AliTPCcalibDB::MakeGRPObjectFromMap(TMap *map){
   gr->GetY()[1]= atof(osensor->GetName());
   sensor2->SetGraph(gr);
   sensor2->SetFit(0);
-  
 
-  AliGRPObject *grpRun = new AliGRPObject; 
+
+  AliGRPObject *grpRun = new AliGRPObject;
   grpRun->ReadValuesFromMap(map);
   grpRun->SetCavernAtmosPressure(sensor2);
   grpRun->SetCavernAtmosPressure(sensor2);
@@ -2144,7 +2178,7 @@ Bool_t AliTPCcalibDB::CreateGUITree(const char* filename){
     if (dataQA->GetTimePosition())
       prep.AddComponent(new AliTPCCalPad(*(dataQA->GetTimePosition())));
   }
-  
+
   //
   TString file(filename);
   if (file.IsNull()) file=Form("guiTreeRun_%i.root",fRun);
@@ -2208,12 +2242,12 @@ Double_t AliTPCcalibDB::GetVDriftCorrectionTime(Int_t timeStamp, Int_t run, Int_
 
   Double_t result=0;
   // mode 1  automatic mode - according to the distance to the valid calibration
-  //                        -  
+  //                        -
   Double_t deltaP=0,  driftP=0,      wP  = 0.;
   Double_t deltaITS=0,driftITS=0,    wITS= 0.;
   Double_t deltaLT=0, driftLT=0,     wLT = 0.;
   Double_t deltaCE=0, driftCE=0,     wCE = 0.;
-  driftP  = fDButil->GetVDriftTPC(deltaP,run,timeStamp); 
+  driftP  = fDButil->GetVDriftTPC(deltaP,run,timeStamp);
   driftITS= fDButil->GetVDriftTPCITS(deltaITS,run,timeStamp);
   driftCE = fDButil->GetVDriftTPCCE(deltaCE, run,timeStamp,36000,2);
   driftLT = fDButil->GetVDriftTPCLaserTracks(deltaLT,run,timeStamp,36000,2);
@@ -2240,7 +2274,7 @@ Double_t AliTPCcalibDB::GetVDriftCorrectionTime(Int_t timeStamp, Int_t run, Int_
     if (wP+wITS+wLT+wCE<kEpsilon) return 0;
     result = (driftP*wP+driftITS*wITS+driftLT*wLT+driftCE*wCE)/(wP+wITS+wLT+wCE);
    }
-   
+
 
   }
 
@@ -2262,7 +2296,7 @@ Double_t AliTPCcalibDB::GetTime0CorrectionTime(Int_t timeStamp, Int_t run, Int_t
   Double_t result=0;
   if (mode==2) {
     // TPC-TPC mode
-    result=fDButil->GetTriggerOffsetTPC(run,timeStamp);    
+    result=fDButil->GetTriggerOffsetTPC(run,timeStamp);
     result  *=fParam->GetZLength();
   }
   if (mode==1){
@@ -2298,7 +2332,7 @@ Double_t AliTPCcalibDB::GetVDriftCorrectionGy(Int_t timeStamp, Int_t run, Int_t
   // use TPC-ITS if present
   TGraphErrors *gr= (TGraphErrors*)array->FindObject("ALIGN_ITSB_TPC_VDGY");
   if (!gr) gr = (TGraphErrors*)array->FindObject("ALIGN_TOFB_TPC_VDGY");
-  if(gr) { 
+  if(gr) {
     result = AliTPCcalibDButil::EvalGraphConst(gr,timeStamp);
 
     // transform from [(cm/mus)/ m] to [1/cm]
@@ -2306,13 +2340,13 @@ Double_t AliTPCcalibDB::GetVDriftCorrectionGy(Int_t timeStamp, Int_t run, Int_t
     result /= 100.;
 
     //printf("result %e \n", result);
-    return result; 
+    return result;
   }
 
   // use laser if ITS-TPC not present
   TGraphErrors *laserA= (TGraphErrors*)array->FindObject("GRAPH_MEAN_GLOBALYGRADIENT_LASER_ALL_A");
   TGraphErrors *laserC= (TGraphErrors*)array->FindObject("GRAPH_MEAN_GLOBALYGRADIENT_LASER_ALL_C");
-  
+
   if (laserA && laserC){
    result= (laserA->Eval(timeStamp)+laserC->Eval(timeStamp))*0.5;
   }
@@ -2346,7 +2380,7 @@ Double_t AliTPCcalibDB::GetVDriftCorrectionDeltaZ(Int_t /*timeStamp*/, Int_t run
 
   // use TPC-ITS if present
   TGraphErrors *gr= (TGraphErrors*)array->FindObject("ALIGN_ITSB_TPC_DELTAZ");
-  if(gr) { 
+  if(gr) {
     result = TMath::Mean(gr->GetN(), gr->GetY());
   }
   return result;
@@ -2364,7 +2398,7 @@ AliTPCCalPad* AliTPCcalibDB::MakeDeadMap(Double_t notInMap, const char* nameMapp
 ///     notInMap (default value 1)
 
   char chinfo[1000];
-   
+
   TFile *fileMapping = new TFile(nameMappingFile, "read");
   AliTPCmapper *mapping = (AliTPCmapper*) fileMapping->Get("tpcMapping");
   if (!mapping) {
@@ -2372,18 +2406,18 @@ AliTPCCalPad* AliTPCcalibDB::MakeDeadMap(Double_t notInMap, const char* nameMapp
     AliError (chinfo);
     return 0;
   }
-  
+
   AliTPCCalPad *deadMap = new AliTPCCalPad("deadMap","deadMap");
   if (!deadMap) {
      AliError("Failed to allocate dead map AliTPCCalPad");
      return 0;
-  }  
-  
+  }
+
   /// get list of active DDLs from OCDB entry
   Int_t idDDL=0;
   if (!fALTROConfigData ) {
      AliError("No ALTRO config OCDB entry available");
-     return 0; 
+     return 0;
   }
   TMap *activeDDL = (TMap*)fALTROConfigData->FindObject("DDLArray");
   TObjString *ddlArray=0;
@@ -2393,7 +2427,7 @@ AliTPCCalPad* AliTPCcalibDB::MakeDeadMap(Double_t notInMap, const char* nameMapp
       AliError("Empty list of active DDLs in OCDB entry");
       return 0;
     }
-  } else { 
+  } else {
     AliError("List of active DDLs not available in OCDB entry");
     return 0;
   }
@@ -2403,7 +2437,7 @@ AliTPCCalPad* AliTPCcalibDB::MakeDeadMap(Double_t notInMap, const char* nameMapp
   for (Int_t i=0; i<mapping->GetNumDdl(); i++) {
     idDDL= i+offset;
     if (idDDL<0) continue;
-    Int_t patch = mapping->GetPatchFromEquipmentID(idDDL);   
+    Int_t patch = mapping->GetPatchFromEquipmentID(idDDL);
     if (patch<0) continue;
     Int_t roc=mapping->GetRocFromEquipmentID(idDDL);
     if (roc<0) continue;
@@ -2419,7 +2453,7 @@ AliTPCCalPad* AliTPCcalibDB::MakeDeadMap(Double_t notInMap, const char* nameMapp
            Int_t pad       = mapping->GetPad(patch, hwadd);
            if (!TString(arrDDL[i]).IsDigit()) {
              active = notInMap;
-           } else { 
+           } else {
               active=TString(arrDDL[i]).Atof();
           }
            calRoc->SetValue(row,pad,active);
@@ -2427,7 +2461,7 @@ AliTPCCalPad* AliTPCcalibDB::MakeDeadMap(Double_t notInMap, const char* nameMapp
         } // end altro for loop
       } // end fec for loop
      } // end branch for loop
-    } // valid calROC 
+    } // valid calROC
    } // end loop on active DDLs
    return deadMap;
 }
@@ -2441,14 +2475,14 @@ AliTPCCorrection * AliTPCcalibDB::GetTPCComposedCorrection(Float_t field) const{
   ///        - Not neeeded for the new space point correction
 
   if (!fComposedCorrectionArray) return 0;
-  if (field>0.1 && fComposedCorrectionArray->At(1)) {   
+  if (field>0.1 && fComposedCorrectionArray->At(1)) {
     return (AliTPCCorrection *)fComposedCorrectionArray->At(1);
   }
   if (field<-0.1 &&fComposedCorrectionArray->At(2)) {
     return (AliTPCCorrection *)fComposedCorrectionArray->At(2);
   }
   return (AliTPCCorrection *)fComposedCorrectionArray->At(0);
-  
+
 }
 
 
@@ -2494,8 +2528,8 @@ Double_t AliTPCcalibDB::GetGainCorrectionHVandPT(Int_t timeStamp, Int_t run, Int
   static Float_t gGainCorrectionPT[72];
   static Float_t gGainCorrectionHV[72];
   static Int_t    gTimeStamp=-99999999;
-  static Bool_t   hasTimeDependent=kFALSE; 
-  if ( TMath::Abs(timeStamp-gTimeStamp)> deltaCache){    
+  static Bool_t   hasTimeDependent=kFALSE;
+  if ( TMath::Abs(timeStamp-gTimeStamp)> deltaCache){
     //
     TGraphErrors * graphGHV = 0;
     TGraphErrors * graphGPT = 0;
@@ -2517,7 +2551,7 @@ Double_t AliTPCcalibDB::GetGainCorrectionHVandPT(Int_t timeStamp, Int_t run, Int
       gGainCorrection[isec]=(1.+deltaGHV)*(1.+deltaGPT);
       gGainCorrectionPT[isec]=1+deltaGPT;
       gGainCorrectionHV[isec]=1+deltaGHV;
-    }    
+    }
     gTimeStamp=timeStamp;
   }
   if (mode==0){