ITSSPDPHYSda:
authormasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 16 Sep 2008 16:48:52 +0000 (16:48 +0000)
committermasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 16 Sep 2008 16:48:52 +0000 (16:48 +0000)
Time stamps added to some printouts, in order to have some information on the
processing time online.
If daqDet_DB_get fails, make sure no corrupt file is left in local directory.
Put hitmaps for each equipment in det db, to be used over several runs to find
dead pixels.
Put local ocdb noisy file in det db after each run (for use in
ITSSPDVertexDiamondda).
Processing continues even if storage to FES fails. In the end a message with
the number of errors will be displayed.

ITSSPDSCANda:
If daqDet_DB_get fails, make sure no corrupt file is left in local directory.

AliITSOnlineCalibrationSPDhandler:
Methods to read/write to local ocdb improved to allow user to choose storage
location.

(H. Tydesjo)

ITS/AliITSOnlineCalibrationSPDhandler.cxx
ITS/AliITSOnlineCalibrationSPDhandler.h
ITS/ITSSPDPHYSda.cxx
ITS/ITSSPDSCANda.cxx

index 9be664b..d9449a0 100644 (file)
@@ -505,11 +505,18 @@ void AliITSOnlineCalibrationSPDhandler::WriteNoisyToFile(UInt_t eq) {
 }
 //____________________________________________________________________________________________
 #ifndef SPD_DA_OFF
-Bool_t AliITSOnlineCalibrationSPDhandler::ReadDeadModuleFromDB(UInt_t module, Int_t runNr, Bool_t treeSerial) {
+Bool_t AliITSOnlineCalibrationSPDhandler::ReadDeadModuleFromDB(UInt_t module, Int_t runNr, Char_t *storage, Bool_t treeSerial) {
   // reads dead pixels from DB for given module and runNr
   AliCDBManager* man = AliCDBManager::Instance();
-  if(!man->IsDefaultStorageSet()) {
-    man->SetDefaultStorage("local://$ALICE_ROOT");
+  TString storageSTR = Form("%s",storage);
+  if (storageSTR.CompareTo("default")==0) {
+    if(!man->IsDefaultStorageSet()) {
+      man->SetDefaultStorage("local://$ALICE_ROOT");
+    }
+  }
+  else {
+    storageSTR = Form("local://%s",storage);
+    man->SetDefaultStorage(storageSTR.Data());
   }
   AliCDBEntry *cdbEntry = man->Get("ITS/Calib/SPDDead", runNr);
   TObjArray* spdEntry;
@@ -551,11 +558,18 @@ Bool_t AliITSOnlineCalibrationSPDhandler::ReadDeadModuleFromDB(UInt_t module, In
   return kTRUE;
 }
 //____________________________________________________________________________________________
-Bool_t AliITSOnlineCalibrationSPDhandler::ReadNoisyModuleFromDB(UInt_t module, Int_t runNr, Bool_t treeSerial) {
+Bool_t AliITSOnlineCalibrationSPDhandler::ReadNoisyModuleFromDB(UInt_t module, Int_t runNr, Char_t *storage, Bool_t treeSerial) {
   // reads noisy pixels from DB for given module and runNr
   AliCDBManager* man = AliCDBManager::Instance();
-  if(!man->IsDefaultStorageSet()) {
-    man->SetDefaultStorage("local://$ALICE_ROOT");
+  TString storageSTR = Form("%s",storage);
+  if (storageSTR.CompareTo("default")==0) {
+    if(!man->IsDefaultStorageSet()) {
+      man->SetDefaultStorage("local://$ALICE_ROOT");
+    }
+  }
+  else {
+    storageSTR = Form("local://%s",storage);
+    man->SetDefaultStorage(storageSTR.Data());
   }
   AliCDBEntry *cdbEntry = man->Get("ITS/Calib/SPDNoisy", runNr);
   TObjArray* spdEntry;
@@ -585,18 +599,25 @@ Bool_t AliITSOnlineCalibrationSPDhandler::ReadNoisyModuleFromDB(UInt_t module, I
   return kTRUE;
 }
 //____________________________________________________________________________________________
-Bool_t AliITSOnlineCalibrationSPDhandler::ReadFromDB(Int_t runNr, Bool_t treeSerial) {
+Bool_t AliITSOnlineCalibrationSPDhandler::ReadFromDB(Int_t runNr, Char_t *storage, Bool_t treeSerial) {
   // reads dead and noisy pixels from DB for given runNr
   // note that you may want to clear the lists (if they are not empty) before reading
-  return (ReadNoisyFromDB(runNr,treeSerial) && ReadDeadFromDB(runNr,treeSerial));
+  return (ReadNoisyFromDB(runNr,storage,treeSerial) && ReadDeadFromDB(runNr,storage,treeSerial));
 }
 //____________________________________________________________________________________________
-Bool_t AliITSOnlineCalibrationSPDhandler::ReadDeadFromDB(Int_t runNr, Bool_t treeSerial) {
+Bool_t AliITSOnlineCalibrationSPDhandler::ReadDeadFromDB(Int_t runNr, Char_t *storage, Bool_t treeSerial) {
   // reads dead pixels from DB for given runNr
   // note that you may want to clear the list (if it is not empty) before reading
   AliCDBManager* man = AliCDBManager::Instance();
-  if(!man->IsDefaultStorageSet()) {
-    man->SetDefaultStorage("local://$ALICE_ROOT");
+  TString storageSTR = Form("%s",storage);
+  if (storageSTR.CompareTo("default")==0) {
+    if(!man->IsDefaultStorageSet()) {
+      man->SetDefaultStorage("local://$ALICE_ROOT");
+    }
+  }
+  else {
+    storageSTR = Form("local://%s",storage);
+    man->SetDefaultStorage(storageSTR.Data());
   }
   AliCDBEntry *cdbEntry = man->Get("ITS/Calib/SPDDead", runNr);
   TObjArray* spdEntry;
@@ -613,7 +634,10 @@ Bool_t AliITSOnlineCalibrationSPDhandler::ReadDeadFromDB(Int_t runNr, Bool_t tre
     calibSPD = (AliITSCalibrationSPD*) spdEntry->At(module);
     UInt_t nrDead = calibSPD->GetNrBadSingle();
     if (nrDead>0) {
-      if (!treeSerial) RecursiveInsertDead(calibSPD,module,0,nrDead-1);
+      if (!treeSerial) {
+       RecursiveInsertDead(calibSPD,module,0,nrDead-1);
+      }
+
       else {
        for (UInt_t index=0; index<nrDead; index++) {
          UInt_t colM = calibSPD->GetBadColAt(index);
@@ -638,12 +662,19 @@ Bool_t AliITSOnlineCalibrationSPDhandler::ReadDeadFromDB(Int_t runNr, Bool_t tre
   return kTRUE;
 }
 //____________________________________________________________________________________________
-Bool_t AliITSOnlineCalibrationSPDhandler::ReadNoisyFromDB(Int_t runNr, Bool_t treeSerial) {
+Bool_t AliITSOnlineCalibrationSPDhandler::ReadNoisyFromDB(Int_t runNr, Char_t *storage, Bool_t treeSerial) {
   // reads noisy pixels from DB for given runNr
   // note that you may want to clear the list (if it is not empty) before reading
   AliCDBManager* man = AliCDBManager::Instance();
-  if(!man->IsDefaultStorageSet()) {
-    man->SetDefaultStorage("local://$ALICE_ROOT");
+  TString storageSTR = Form("%s",storage);
+  if (storageSTR.CompareTo("default")==0) {
+    if(!man->IsDefaultStorageSet()) {
+      man->SetDefaultStorage("local://$ALICE_ROOT");
+    }
+  }
+  else {
+    storageSTR = Form("local://%s",storage);
+    man->SetDefaultStorage(storageSTR.Data());
   }
   AliCDBEntry *cdbEntry = man->Get("ITS/Calib/SPDNoisy", runNr);
   TObjArray* spdEntry;
@@ -677,6 +708,63 @@ Bool_t AliITSOnlineCalibrationSPDhandler::ReadNoisyFromDB(Int_t runNr, Bool_t tr
   return kTRUE;
 }
 //____________________________________________________________________________________________
+Bool_t AliITSOnlineCalibrationSPDhandler::ReadDeadFromDBasNoisy(Int_t runNr, Char_t *storage, Bool_t treeSerial) {
+  // reads dead pixels (put as noisy) from DB for given runNr
+  // note that you may want to clear the list (if it is not empty) before reading
+  AliCDBManager* man = AliCDBManager::Instance();
+  TString storageSTR = Form("%s",storage);
+  if (storageSTR.CompareTo("default")==0) {
+    if(!man->IsDefaultStorageSet()) {
+      man->SetDefaultStorage("local://$ALICE_ROOT");
+    }
+  }
+  else {
+    storageSTR = Form("local://%s",storage);
+    man->SetDefaultStorage(storageSTR.Data());
+  }
+  AliCDBEntry *cdbEntry = man->Get("ITS/Calib/SPDNoisy", runNr);
+  TObjArray* spdEntry;
+  if(cdbEntry) {
+    spdEntry = (TObjArray*)cdbEntry->GetObject();
+    if(!spdEntry) return kFALSE;
+  }
+  else {
+    Warning("AliITSOnlineCalibrationSPDhandler::ReadDeadFromDBasNoisy","Calibration for run %d not found in database.",runNr);
+    return kFALSE;
+  }
+  AliITSCalibrationSPD* calibSPD;
+  for (UInt_t module=0; module<240; module++) {
+    calibSPD = (AliITSCalibrationSPD*) spdEntry->At(module);
+    UInt_t nrDead = calibSPD->GetNrBadSingle();
+    if (nrDead>0) {
+      if (!treeSerial) {
+       RecursiveInsertDead(calibSPD,module,0,nrDead-1);
+      }
+
+      else {
+       for (UInt_t index=0; index<nrDead; index++) {
+         UInt_t colM = calibSPD->GetBadColAt(index);
+         UInt_t rowM = calibSPD->GetBadRowAt(index);
+         SetDeadPixelM(module,colM,rowM);
+       }
+      }
+    }
+    for (UInt_t chipIndex=0; chipIndex<5; chipIndex++) {
+      UInt_t eq,hs,chip,col,row;
+      AliITSRawStreamSPD::OfflineToOnline(module, chipIndex*32, 0, eq, hs, chip, col, row);
+      if (calibSPD->IsChipBad(chipIndex)) {
+       SetDeadChip(eq,hs,chip);
+      }
+      else {
+       SetDeadChip(eq,hs,chip,kFALSE);
+      }
+    }
+  }
+  spdEntry->SetOwner(kTRUE);
+  spdEntry->Clear();
+  return kTRUE;
+}
+//____________________________________________________________________________________________
 Bool_t AliITSOnlineCalibrationSPDhandler::ReadDeadFromCalibObj(TObjArray* calObj) {
   // reads dead pixels from calib object
   for (UInt_t module=0; module<240; module++) {
@@ -709,18 +797,25 @@ Bool_t AliITSOnlineCalibrationSPDhandler::ReadNoisyFromCalibObj(TObjArray* calOb
   return kTRUE;
 }
 //____________________________________________________________________________________________
-Bool_t AliITSOnlineCalibrationSPDhandler::WriteToDB(Int_t runNrStart, Int_t runNrEnd) {
+Bool_t AliITSOnlineCalibrationSPDhandler::WriteToDB(Int_t runNrStart, Int_t runNrEnd, Char_t *storage) {
   // writes dead and noisy pixels to DB for given runNrs
   // overwrites any previous entries
-  return (WriteNoisyToDB(runNrStart,runNrEnd) && WriteDeadToDB(runNrStart,runNrEnd));
+  return (WriteNoisyToDB(runNrStart,runNrEnd,storage) && WriteDeadToDB(runNrStart,runNrEnd,storage));
 }
 //____________________________________________________________________________________________
-Bool_t AliITSOnlineCalibrationSPDhandler::WriteDeadToDB(Int_t runNrStart, Int_t runNrEnd) {
+Bool_t AliITSOnlineCalibrationSPDhandler::WriteDeadToDB(Int_t runNrStart, Int_t runNrEnd, Char_t *storage) {
   // writes dead pixels to DB for given runNrs
   // overwrites any previous entries
   AliCDBManager* man = AliCDBManager::Instance();
-  if(!man->IsDefaultStorageSet()) {
-    man->SetDefaultStorage("local://$ALICE_ROOT");
+  TString storageSTR = Form("%s",storage);
+  if (storageSTR.CompareTo("default")==0) {
+    if(!man->IsDefaultStorageSet()) {
+      man->SetDefaultStorage("local://$ALICE_ROOT");
+    }
+  }
+  else {
+    storageSTR = Form("local://%s",storage);
+    man->SetDefaultStorage(storageSTR.Data());
   }
   AliCDBMetaData* metaData = new AliCDBMetaData();
   metaData->SetResponsible("Henrik Tydesjo");
@@ -755,12 +850,19 @@ Bool_t AliITSOnlineCalibrationSPDhandler::WriteDeadToDB(Int_t runNrStart, Int_t
   return kTRUE;
 }
 //____________________________________________________________________________________________
-Bool_t AliITSOnlineCalibrationSPDhandler::WriteDeadToDBasNoisy(Int_t runNrStart, Int_t runNrEnd) {
+Bool_t AliITSOnlineCalibrationSPDhandler::WriteDeadToDBasNoisy(Int_t runNrStart, Int_t runNrEnd, Char_t *storage) {
   // writes dead pixels to DB for given runNrs
   // overwrites any previous entries
   AliCDBManager* man = AliCDBManager::Instance();
-  if(!man->IsDefaultStorageSet()) {
-    man->SetDefaultStorage("local://$ALICE_ROOT");
+  TString storageSTR = Form("%s",storage);
+  if (storageSTR.CompareTo("default")==0) {
+    if(!man->IsDefaultStorageSet()) {
+      man->SetDefaultStorage("local://$ALICE_ROOT");
+    }
+  }
+  else {
+    storageSTR = Form("local://%s",storage);
+    man->SetDefaultStorage(storageSTR.Data());
   }
   AliCDBMetaData* metaData = new AliCDBMetaData();
   metaData->SetResponsible("Henrik Tydesjo");
@@ -795,12 +897,19 @@ Bool_t AliITSOnlineCalibrationSPDhandler::WriteDeadToDBasNoisy(Int_t runNrStart,
   return kTRUE;
 }
 //____________________________________________________________________________________________
-Bool_t AliITSOnlineCalibrationSPDhandler::WriteNoisyToDB(Int_t runNrStart, Int_t runNrEnd) {
+Bool_t AliITSOnlineCalibrationSPDhandler::WriteNoisyToDB(Int_t runNrStart, Int_t runNrEnd, Char_t *storage) {
   // writes noisy pixels to DB for given runNrs
   // overwrites any previous entries
   AliCDBManager* man = AliCDBManager::Instance();
-  if(!man->IsDefaultStorageSet()) {
-    man->SetDefaultStorage("local://$ALICE_ROOT");
+  TString storageSTR = Form("%s",storage);
+  if (storageSTR.CompareTo("default")==0) {
+    if(!man->IsDefaultStorageSet()) {
+      man->SetDefaultStorage("local://$ALICE_ROOT");
+    }
+  }
+  else {
+    storageSTR = Form("local://%s",storage);
+    man->SetDefaultStorage(storageSTR.Data());
   }
   AliCDBMetaData* metaData = new AliCDBMetaData();
   metaData->SetResponsible("Henrik Tydesjo");
index e85ebd0..2b59d95 100644 (file)
@@ -64,17 +64,18 @@ class AliITSOnlineCalibrationSPDhandler {
   void    WriteNoisyToFile(UInt_t eq);
 
 #ifndef SPD_DA_OFF
-  Bool_t  ReadDeadModuleFromDB(UInt_t module, Int_t runNr, Bool_t treeSerial=kFALSE);
-  Bool_t  ReadNoisyModuleFromDB(UInt_t module, Int_t runNr, Bool_t treeSerial=kFALSE);
-  Bool_t  ReadFromDB(Int_t runNr, Bool_t treeSerial=kFALSE);
-  Bool_t  ReadDeadFromDB(Int_t runNr, Bool_t treeSerial=kFALSE);
-  Bool_t  ReadNoisyFromDB(Int_t runNr, Bool_t treeSerial=kFALSE);
+  Bool_t  ReadDeadModuleFromDB(UInt_t module, Int_t runNr, Char_t *storage="default", Bool_t treeSerial=kFALSE);
+  Bool_t  ReadNoisyModuleFromDB(UInt_t module, Int_t runNr, Char_t *storage="default", Bool_t treeSerial=kFALSE);
+  Bool_t  ReadFromDB(Int_t runNr, Char_t *storage="default", Bool_t treeSerial=kFALSE);
+  Bool_t  ReadDeadFromDB(Int_t runNr, Char_t *storage="default", Bool_t treeSerial=kFALSE);
+  Bool_t  ReadNoisyFromDB(Int_t runNr, Char_t *storage="default", Bool_t treeSerial=kFALSE);
+  Bool_t  ReadDeadFromDBasNoisy(Int_t runNr, Char_t *storage="default", Bool_t treeSerial=kFALSE);
   Bool_t  ReadDeadFromCalibObj(TObjArray* calObj);
   Bool_t  ReadNoisyFromCalibObj(TObjArray* calObj);
-  Bool_t  WriteToDB(Int_t runNrStart, Int_t runNrEnd);
-  Bool_t  WriteDeadToDB(Int_t runNrStart, Int_t runNrEnd);
-  Bool_t  WriteDeadToDBasNoisy(Int_t runNrStart, Int_t runNrEnd);
-  Bool_t  WriteNoisyToDB(Int_t runNrStart, Int_t runNrEnd);
+  Bool_t  WriteToDB(Int_t runNrStart, Int_t runNrEnd, Char_t *storage="default");
+  Bool_t  WriteDeadToDB(Int_t runNrStart, Int_t runNrEnd, Char_t *storage="default");
+  Bool_t  WriteDeadToDBasNoisy(Int_t runNrStart, Int_t runNrEnd, Char_t *storage="default");
+  Bool_t  WriteNoisyToDB(Int_t runNrStart, Int_t runNrEnd, Char_t *storage="default");
 #endif
 
   void    GenerateDCSConfigFile(const Char_t* fileName);
index 5940d1d..5ebf3a4 100644 (file)
@@ -35,7 +35,7 @@ extern "C" {
 #include "AliLog.h"
 #include <iostream>
 #include <fstream>
-//#include <time.h>
+#include <time.h>
 #include <TROOT.h>
 #include <TPluginManager.h>
 #include <TObjArray.h>
@@ -49,7 +49,9 @@ int main(int argc, char **argv) {
     return -1;
   }
 
-  // directory structure, hard coded
+  UInt_t nrErrors = 0;
+
+  // directory structure, hard coded                              //   FOR OFFLINE VERSION:
   char *saveDirDead          = "./calibResults/Dead";             // may NOT delete content
   char *saveDirDeadToFXS     = "./calibResults/DeadToFXS";        //     may delete content
   char *saveDirDeadRef       = "./calibResults/DeadReference";    //     may delete content
@@ -58,7 +60,17 @@ int main(int argc, char **argv) {
   char *saveDirNoisyRef      = "./calibResults/NoisyReference";   //     may delete content
   char *saveDirIdsToFXS      = "./calibResults/IdsToFXS";         //     may delete content
   char *configFilesDir       = "./configFiles";                   //     may delete content
-  // make sure the directory structure is put up correctly:
+  // clean up and make sure the directory structure is put up correctly:
+#ifndef SPD_DA_OFF
+  system("rm ./calibResults -rf >& /dev/null");
+  system("rm ./ITS -rf >& /dev/null");
+#else
+  system("rm ./calibResults/DeadToFXS -rf >& /dev/null");
+  system("rm ./calibResults/DeadReference -rf >& /dev/null");
+  system("rm ./calibResults/NoisyToFXS -rf >& /dev/null");
+  system("rm ./calibResults/NoisyReference -rf >& /dev/null");
+  system("rm ./calibResults/IdsToFXS -rf >& /dev/null");
+#endif
   system("mkdir ./calibResults >& /dev/null");
   system("mkdir ./calibResults/Dead >& /dev/null");
   system("mkdir ./calibResults/DeadToFXS >& /dev/null");
@@ -68,6 +80,11 @@ int main(int argc, char **argv) {
   system("mkdir ./calibResults/NoisyReference >& /dev/null");
   system("mkdir ./calibResults/IdsToFXS >& /dev/null");
   system("mkdir ./configFiles >& /dev/null");
+#ifndef SPD_DA_OFF
+  system("mkdir ./ITS >& /dev/null");
+  system("mkdir ./ITS/Calib >& /dev/null");
+  system("mkdir ./ITS/Calib/SPDNoisy >& /dev/null");
+#endif
   // parameters config file
   TString paramsFileName = Form("%s/physics_params.txt",configFilesDir);
 
@@ -96,6 +113,8 @@ int main(int argc, char **argv) {
   par_status=daqDA_DB_getFile(idp.Data(),paramsFileName.Data());
   if (par_status) {
     printf("SPD DA: Failed to get config file %s: status=%d. Using default tuning parameters.\n",idp.Data(),par_status);
+    TString rmCmd = Form("rm -f %s",paramsFileName.Data());
+    system(rmCmd.Data());
   }
 #endif
   if (par_status==0) {
@@ -133,17 +152,16 @@ int main(int argc, char **argv) {
 
   // Read silent=dead+inactive info from previous calibrations
 #ifndef SPD_DA_OFF
-  // remove previous files and read from DB instead
-  TString commandRemoveDead = Form("cd %s; rm -f *",saveDirDead);
-  system(commandRemoveDead.Data());
   for (UInt_t eq=0; eq<20; eq++) {
     Int_t getPreviousDead_status = 0;
     TString idpd = Form("spd_previous_dead_%d",eq);
     TString fileName = Form("%s/SPD_Dead_%d.root",saveDirDead,eq);
     getPreviousDead_status = daqDA_DB_getFile(idpd.Data(),fileName.Data());
-    //    printf("daqDA_DB_getFile(%s,%s)\n",idpd.Data(),fileName.Data());
-    if (par_status) {
+    //        printf("daqDA_DB_getFile(%s,%s)\n",idpd.Data(),fileName.Data());
+    if (getPreviousDead_status) {
       printf("SPD DA: Failed to get dead file %s: status=%d. Dead search will start from zero for this eq.\n",idpd.Data(),getPreviousDead_status);
+      TString rmCmd = Form("rm -f %s",fileName.Data());
+      system(rmCmd.Data());
     }
   }
 #endif
@@ -151,6 +169,22 @@ int main(int argc, char **argv) {
   handler->ReadSilentFromFiles();
   printf("SPD DA: Number of single dead pixels from previous runs: %d\n",handler->GetNrDead());
 
+  // Read hit-maps from previous runs
+#ifndef SPD_DA_OFF
+  for (UInt_t eq=0; eq<20; eq++) {
+    Int_t getPreviousHitmap_status = 0;
+    TString idph = Form("spd_previous_hitmap_%d",eq);
+    TString fileName = Form("%s/SPDphys_dead_run_0_0_eq_%d.root",saveDirDeadRefTmp,eq);
+    getPreviousHitmap_status = daqDA_DB_getFile(idph.Data(),fileName.Data());
+    //    printf("daqDA_DB_getFile(%s,%s)\n",idph.Data(),fileName.Data());
+    if (getPreviousHitmap_status) {
+      printf("SPD DA: Failed to get previous hitmap file %s: status=%d. Dead search will start with empty hitmap for this eq.\n",idph.Data(),getPreviousHitmap_status);
+      TString rmCmd = Form("rm -f %s",fileName.Data());
+      system(rmCmd.Data());
+    }
+  }
+#endif
+
 
 
 
@@ -351,18 +385,9 @@ int main(int argc, char **argv) {
 
   // ********* STEP 2: Analyze phys container files. ************************************************
 
-  //  time_t timeStamp = time(NULL);
+  time_t timeStamp = time(NULL);
   //  printf("*** Start step2 , %d\n",time(NULL) - timeStamp);
 
-  // clear noisyToFXS dir:
-  TString command;
-  command = Form("cd %s; rm -f *",saveDirNoisyToFXS);
-  system(command.Data());
-  // clear deadToFXS dir:
-  command = Form("cd %s; rm -f *",saveDirDeadToFXS);
-  system(command.Data());
-
-
   UInt_t firstRunNrDead = runNr;
 
 
@@ -381,8 +406,7 @@ int main(int argc, char **argv) {
     // check data in container
     if (noisyAnalyzer->GetEqNr() != eq) {
       if (noisyAnalyzer->GetEqNr() != 999) {
-       printf("SPD DA ERROR: Mismatching EqId in Container data and filename (%d!=%d). Skipping eq.\n",
-              noisyAnalyzer->GetEqNr(),eq);
+       printf("SPD DA ERROR: Mismatching EqId in Container data and filename (%d!=%d). Skipping eq.\n",noisyAnalyzer->GetEqNr(),eq);
       }
       delete noisyAnalyzer;
       continue;
@@ -426,9 +450,11 @@ int main(int argc, char **argv) {
     delete noisyAnalyzer;
 
 #ifndef SPD_DA_OFF
-    daqDA_progressReport((unsigned int)((eq+1)*2.5));
+    //    daqDA_progressReport((unsigned int)((eq+1)*2.5));
+    printf("SPD DA: progress: %d , %ld\n",(unsigned int)(50+(eq+1)*2.5), time(NULL) - timeStamp);
 #else
-    printf("SPD DA: progress: %d\n",(unsigned int)(50+(eq+1)*1.25));
+    //    printf("SPD DA: progress: %d\n",(unsigned int)(50+(eq+1)*1.25));
+    printf("SPD DA: progress: %d , %ld\n",(unsigned int)(50+(eq+1)*1.25), time(NULL) - timeStamp);
 #endif
   }
   // *** *** *** end loop over equipments (eq_id)
@@ -437,8 +463,18 @@ int main(int argc, char **argv) {
         handler->GetNrNoisy(),nrEnoughStatNoisy);
   handler->SetFileLocation(saveDirNoisyToFXS);
   UInt_t nrNoisyFilesProduced = handler->WriteNoisyToFiles();
-
-
+#ifndef SPD_DA_OFF
+  // save noisy to local OCDB
+  handler->WriteNoisyToDB(runNr,9999999,".");
+  // store local OCDB file in daq Det DB
+  TString ocdb_fileName = Form("./ITS/Calib/SPDNoisy/Run%d_9999999_v0_s0.root",runNr);
+  TString idod = "spd_noisy_ocdb";
+  Int_t ocdb_store_status = daqDA_DB_storeFile(ocdb_fileName.Data(),idod.Data());
+  //    printf("daqDA_DB_storeFile(%s,%s)\n",ocdb_fileName.Data(),idod.Data());
+  if (ocdb_store_status) {
+    printf("SPD DA ERROR: Failed to store noisy ocdb file %s in daqDetDB: status=%d.\n",idod.Data(),ocdb_store_status);
+  }
+#endif
 
 
 
@@ -461,8 +497,7 @@ int main(int argc, char **argv) {
     // check data in container
     if (deadAnalyzer->GetEqNr() != eq) {
       if (deadAnalyzer->GetEqNr() != 999) {
-       printf("SPD DA ERROR: Mismatching EqId in Dead Container data and filename (%d!=%d). Skipping eq.\n",
-              deadAnalyzer->GetEqNr(),eq);
+       printf("SPD DA ERROR: Mismatching EqId in Dead Container data and filename (%d!=%d). Skipping eq.\n",deadAnalyzer->GetEqNr(),eq);
       }
       delete deadAnalyzer;
       nrDeadChips+=60; // since this eq is inactive...
@@ -477,7 +512,8 @@ int main(int argc, char **argv) {
       deadAnalyzer->SetParam(((TObjString*)paramNames.At(i))->GetString().Data(),((TObjString*)paramVals.At(i))->GetString().Data());
     }
 
-    printf("SPD DA: SPD phys STEP 2: Dead search for eq %d\n",eq);  
+    UInt_t nrEventsCollected = physObj->GetNrEvents();
+    printf("SPD DA: SPD phys STEP 2: Dead search for eq %d (%d events)\n",eq,nrEventsCollected);  
 
     // search for dead pixels:
     nrEnoughStatChips += deadAnalyzer->ProcessDeadPixels();
@@ -488,9 +524,11 @@ int main(int argc, char **argv) {
 
 
 #ifndef SPD_DA_OFF
-    daqDA_progressReport((unsigned int)(50+(eq+1)*2.5));
+    //    daqDA_progressReport((unsigned int)(50+(eq+1)*2.5));
+    printf("SPD DA: progress: %d , %ld\n",(unsigned int)(50+(eq+1)*2.5), time(NULL) - timeStamp);
 #else
-    printf("SPD DA: progress: %d\n",(unsigned int)(75+(eq+1)*1.25));
+    //    printf("SPD DA: progress: %d\n",(unsigned int)(75+(eq+1)*1.25));
+    printf("SPD DA: progress: %d , %ld\n",(unsigned int)(75+(eq+1)*1.25), time(NULL) - timeStamp);
 #endif
   }
   // *** *** *** end loop over equipments (eq)
@@ -507,7 +545,8 @@ int main(int argc, char **argv) {
   handler->WriteSilentToFilesAlways();
 
 
-  printf("SPD DA: Opening id list file\n");
+  //  printf("SPD DA: Opening id list file\n");
+  printf("SPD DA: Opening id list file , %ld\n",time(NULL) - timeStamp);
   TString idsFXSFileName = Form("%s/FXSids_run_%d.txt",saveDirIdsToFXS,runNr);
   ofstream idsFXSfile;
   idsFXSfile.open(idsFXSFileName.Data());
@@ -515,6 +554,7 @@ int main(int argc, char **argv) {
 
   // store dead+inactive pixels in DB, used as starting point for later runs
 #ifndef SPD_DA_OFF
+  printf("store previous dead in DB , %ld\n",time(NULL) - timeStamp);
   for (UInt_t eq=0; eq<20; eq++) {
     Int_t storePreviousDead_status = 0;
     TString idpd = Form("spd_previous_dead_%d",eq);
@@ -542,11 +582,14 @@ int main(int argc, char **argv) {
        TString newFileName = Form("%s/SPDphys_dead_run_%d_%d_eq_%d.root",saveDirDeadRef,firstRunNrDead,runNr,eq);
        TString command = Form("mv -f %s %s",fileName.Data(),newFileName.Data());
        system(command.Data());
-
        tarFiles.Append(Form("SPDphys_dead_run_%d_%d_eq_%d.root ",firstRunNrDead,runNr,eq));
+       // create empty hitmap file to send to DB later
+       AliITSOnlineSPDphys* physObj = new AliITSOnlineSPDphys(fileName.Data());
+       physObj->SetEqNr(eq);
+       delete physObj;
       }
     }
-    if  (tarFiles.Length() > 0) {   // make sure there are any files to send
+    if  (tarFiles.Length() > 0) {   // make sure there are some files to send
       TString send_command = Form("cd %s; tar -cf ref_phys_dead.tar %s",saveDirDeadRef,tarFiles.Data());
       system(send_command.Data());
       TString fileName = Form("%s/ref_phys_dead.tar",saveDirDeadRef);
@@ -555,17 +598,33 @@ int main(int argc, char **argv) {
       status = daqDA_FES_storeFile(fileName.Data(),id.Data());
       if (status!=0) {
        printf("SPD DA ERROR: Failed to export file %s , status %d\n",fileName.Data(),status);
-       return -1;
+       nrErrors++;
       }
 #endif
       idsFXSfile << Form("%s\n",id.Data());
     }
   }
 
+  // store hitmaps (maybe empty) in DB, used as starting point for later runs:
+#ifndef SPD_DA_OFF
+  printf("store previous hitmaps in DB , %ld\n",time(NULL) - timeStamp);
+  for (UInt_t eq=0; eq<20; eq++) {
+    Int_t storePreviousHitmap_status = 0;
+    TString idph = Form("spd_previous_hitmap_%d",eq);
+    TString fileName = Form("%s/SPDphys_dead_run_0_0_eq_%d.root",saveDirDeadRefTmp,eq);
+    storePreviousHitmap_status = daqDA_DB_storeFile(fileName.Data(),idph.Data());
+    //    printf("daqDA_DB_storeFile(%s,%s)\n",fileName.Data(),idph.Data());
+    if (storePreviousHitmap_status) {
+      printf("SPD DA ERROR: Failed to store hitmap file %s in daqDetDB: status=%d.\n",idph.Data(),storePreviousHitmap_status);
+    }
+  }
+#endif
+
 
 
   // send (noisy) reference data for this run to FXS
-  printf("SPD DA: Preparing noisy reference data\n");
+  //  printf("SPD DA: Preparing physics reference data for this run\n");
+  printf("SPD DA: Preparing physics reference data for this run , %ld\n",time(NULL) - timeStamp);
   TString tarFiles = "";
   for (UInt_t eq=0; eq<20; eq++) {
     if (eqActiveNoisy[eq]) {
@@ -581,7 +640,7 @@ int main(int argc, char **argv) {
     status = daqDA_FES_storeFile(fileName.Data(),id.Data());
     if (status!=0) {
       printf("SPD DA ERROR: Failed to export file %s , status %d\n",fileName.Data(),status);
-      return -1;
+      nrErrors++;
     }
 #endif
     idsFXSfile << Form("%s\n",id.Data());
@@ -590,7 +649,8 @@ int main(int argc, char **argv) {
 
 
   // send dead pixels to FXS
-  printf("SPD DA: Preparing dead files for FXS\n");
+  //  printf("SPD DA: Preparing dead files for FXS\n");
+  printf("SPD DA: Preparing dead files for FXS , %ld\n",time(NULL) - timeStamp);
   // send a tared file of all the dead files
   TString send_command = Form("cd %s; tar -cf dead_phys.tar *",saveDirDeadToFXS);
   //  printf("\n\n%s\n\n",command.Data());
@@ -601,7 +661,7 @@ int main(int argc, char **argv) {
   Int_t send_status = daqDA_FES_storeFile(fileName.Data(),id.Data());
   if (send_status!=0) {
     printf("SPD DA ERROR: Failed to export file %s , status %d\n",fileName.Data(),send_status);
-    return -1;
+    nrErrors++;
   }
 #endif
   idsFXSfile << Form("%s\n",id.Data());
@@ -610,7 +670,8 @@ int main(int argc, char **argv) {
 
   // send noisy pixels to FXS
   if (nrNoisyFilesProduced > 0) {   // make sure there is at least one file created
-    printf("SPD DA: Preparing noisy files for FXS\n");
+    //    printf("SPD DA: Preparing noisy files for FXS\n");
+    printf("SPD DA: Preparing noisy files for FXS , %ld\n",time(NULL) - timeStamp);
     // send a tared file of all the noisy files
     TString command = Form("cd %s; tar -cf noisy_phys.tar *",saveDirNoisyToFXS);
     //    printf("\n\n%s\n\n",command.Data());
@@ -621,7 +682,7 @@ int main(int argc, char **argv) {
     status = daqDA_FES_storeFile(fileName.Data(),id.Data());
     if (status!=0) {
       printf("SPD DA ERROR: Failed to export file %s , status %d\n",fileName.Data(),status);
-      return -1;
+      nrErrors++;
     }
 #endif
     idsFXSfile << Form("%s\n",id.Data());
@@ -636,7 +697,7 @@ int main(int argc, char **argv) {
   status = daqDA_FES_storeFile(idsFXSFileName.Data(),id.Data());
   if (status!=0) {
     printf("SPD DA ERROR: Failed to export file %s , status %d\n",idsFXSFileName.Data(),status);
-    return -1;
+    nrErrors++;
   }
 #endif
 
@@ -645,8 +706,10 @@ int main(int argc, char **argv) {
 
   delete handler;
 
-  //  printf("*** End step2 , %d\n",time(NULL) - timeStamp);
+  printf("SPD DA: End of all operations, %d errors, %ld\n", nrErrors, time(NULL) - timeStamp);
 
+  if (nrErrors>0) return -1;
 
   return 0;
+
 }
index 17d57bf..94ef001 100644 (file)
@@ -104,6 +104,8 @@ int main(int argc, char **argv) {
   status=daqDA_DB_getFile(idp.Data(),paramsFileName.Data());
   if (status) {
     printf("Failed to get config file %s: status=%d. Using default tuning parameters.\n",idp.Data(),status);
+    TString rmCmd = Form("rm -f %s",paramsFileName.Data());
+    system(rmCmd.Data());
   }
 #endif
   if (status==0) {
@@ -139,6 +141,8 @@ int main(int argc, char **argv) {
   permstatus=daqDA_DB_getFile(idn.Data(),permNoisyFileName.Data());
   if (permstatus) {
     printf("Failed to get config file %s: status=%d. No permanently noisy pixels will be added.\n",idn.Data(),permstatus);
+    TString rmCmd = Form("rm -f %s",permNoisyFileName.Data());
+    system(rmCmd.Data());
   }
 #endif