a) The dead pixels are now retrieved and saved in the daqDetDB for each run. This...
authorprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 19 Aug 2008 20:52:16 +0000 (20:52 +0000)
committerprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 19 Aug 2008 20:52:16 +0000 (20:52 +0000)
b) Check added to make sure no empty tar archives are created.
c) Printout of number of events collected (used) at end of run.

ITS/ITSSPDPHYSda.cxx

index 3d4b8bf..94bf5e2 100644 (file)
@@ -45,7 +45,7 @@ extern "C" {
 
 int main(int argc, char **argv) {
   if (argc<2) {
-    printf("Wrong number of arguments\n");
+    printf("SPD DA ERROR: Wrong number of arguments\n");
     return -1;
   }
 
@@ -95,14 +95,14 @@ int main(int argc, char **argv) {
   TString idp = "spd_physics_params";
   par_status=daqDA_DB_getFile(idp.Data(),paramsFileName.Data());
   if (par_status) {
-    printf("Failed to get config file %s: status=%d. Using default tuning parameters.\n",idp.Data(),par_status);
+    printf("SPD DA: Failed to get config file %s: status=%d. Using default tuning parameters.\n",idp.Data(),par_status);
   }
 #endif
   if (par_status==0) {
     ifstream paramsFile;
     paramsFile.open(paramsFileName.Data(), ifstream::in);
     if (paramsFile.fail()) {
-      printf("No config file (%s) present. Using default tuning parameters.\n",paramsFileName.Data());
+      printf("SPD DA: No config file (%s) present. Using default tuning parameters.\n",paramsFileName.Data());
     }
     else {
       while(1) {
@@ -130,10 +130,26 @@ int main(int argc, char **argv) {
 
   // create calibration handler (needed already at step 1 in order to fill which eq,hs,chips are active
   AliITSOnlineCalibrationSPDhandler* handler = new AliITSOnlineCalibrationSPDhandler();
+
   // 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("SPD DA: Failed to get dead file %s: status=%d. Dead search will start from zero for this eq.\n",idpd.Data(),getPreviousDead_status);
+    }
+  }
+#endif
   handler->SetFileLocation(saveDirDead);
   handler->ReadSilentFromFiles();
-  printf("Nr dead pixels before: %d\n",handler->GetNrDead());
+  printf("SPD DA: Number of single dead pixels from previous runs: %d\n",handler->GetNrDead());
 
 
 
@@ -142,7 +158,7 @@ int main(int argc, char **argv) {
 
 #ifndef SPD_DA_OFF
   if (getenv("DATE_RUN_NUMBER")==0) {
-    printf("DATE_RUN_NUMBER not properly set.\n");
+    printf("SPD DA ERROR: DATE_RUN_NUMBER not properly set.\n");
     return -1;
   }
   int runNr = atoi(getenv("DATE_RUN_NUMBER"));
@@ -161,6 +177,8 @@ int main(int argc, char **argv) {
   }
 
 
+  UInt_t eventNr=0;
+
   // loop over run segments in case of offline mode
 #ifdef SPD_DA_OFF
   for (int segNr=startSeg; segNr<argc; segNr++) {
@@ -175,13 +193,13 @@ int main(int argc, char **argv) {
     status=monitorSetDataSource( argv[segNr] );
 #endif
     if (status!=0) {
-      printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
+      printf("SPD DA ERROR: monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
       return -1;
     }
     /* declare monitoring program */
     status=monitorDeclareMp("ITS_SPD_PHYS");
     if (status!=0) {
-      printf("monitorDeclareMp() failed : %s\n",monitorDecodeError(status));
+      printf("SPD DA ERROR: monitorDeclareMp() failed : %s\n",monitorDecodeError(status));
       return -1;
     }
     /* define wait event timeout - 1s max */
@@ -189,8 +207,6 @@ int main(int argc, char **argv) {
     monitorSetNoWaitNetworkTimeout(1000);
 
 
-    UInt_t eventNr=0;
-
     /* main loop (infinite) */
     for(;;) {
 
@@ -205,12 +221,12 @@ int main(int argc, char **argv) {
       /* get next event (blocking call until timeout) */
       status=monitorGetEventDynamic((void **)&event);
       if (status==MON_ERR_EOF) {
-       printf ("End of File detected\n");
+       printf ("SPD DA: End of File detected\n");
        break; /* end of monitoring file has been reached */
       }
 
       if (status!=0) {
-       printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
+       printf("SPD DA: monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
        break;
       }
 
@@ -232,7 +248,7 @@ int main(int argc, char **argv) {
          Int_t eq = reader->GetDDLID();
          // check that this hs is active in handler object
          if (!(handler->IsActiveEq(eq))) {
-           printf("Info: Found Eq (%d) , previously inactive\n",eq);
+           printf("SPD DA: Found Eq (%d) , previously inactive\n",eq);
            handler->ActivateEq(eq);
          }
          if (eq>=0 && eq<20) {
@@ -247,13 +263,13 @@ int main(int argc, char **argv) {
            UInt_t hs = str->GetHalfStaveNr();
            // check that this hs is active in handler object
            if (!(handler->IsActiveHS(eq,hs))) {
-             printf("Info: Found HS (%d,%d) , previously inactive\n",eq,hs);
+             printf("SPD DA: Found HS (%d,%d) , previously inactive\n",eq,hs);
              handler->ActivateHS(eq,hs);
            }
            UInt_t chip = str->GetChipAddr();
            // check that this chip is active in handler object
            if (!(handler->IsActiveChip(eq,hs,chip))) {
-             printf("Info: Found Chip (%d,%d,%d) , previously inactive\n",eq,hs,chip);
+             printf("SPD DA: Found Chip (%d,%d,%d) , previously inactive\n",eq,hs,chip);
              handler->ActivateChip(eq,hs,chip);
            }
            physObj[eq]->IncrementHits(hs,chip,str->GetChipCol(),str->GetChipRow());
@@ -319,15 +335,16 @@ int main(int argc, char **argv) {
     
 
 #ifdef SPD_DA_OFF
-    printf("progress: %d\n",(unsigned int)( ((Float_t)(segNr-startSeg+1))/(argc-startSeg)*50 ));
+    printf("SPD DA: progress: %d\n",(unsigned int)( ((Float_t)(segNr-startSeg+1))/(argc-startSeg)*50 ));
   }
 #endif
-  
+
   // clean up phys objects (also saves them)
   for (UInt_t eq=0; eq<20; eq++) {
     if (physObj[eq]!=NULL) delete physObj[eq];
   }
 
+  printf("SPD DA: %d events collected for this run.\n",eventNr);
 
 
 
@@ -364,7 +381,7 @@ int main(int argc, char **argv) {
     // check data in container
     if (noisyAnalyzer->GetEqNr() != eq) {
       if (noisyAnalyzer->GetEqNr() != 999) {
-       printf("Error: Mismatching EqId in Container data and filename (%d!=%d). Skipping.\n",
+       printf("SPD DA ERROR: Mismatching EqId in Container data and filename (%d!=%d). Skipping eq.\n",
               noisyAnalyzer->GetEqNr(),eq);
       }
       delete noisyAnalyzer;
@@ -379,7 +396,7 @@ int main(int argc, char **argv) {
       noisyAnalyzer->SetParam(((TObjString*)paramNames.At(i))->GetString().Data(),((TObjString*)paramVals.At(i))->GetString().Data());
     }
 
-    printf("SPD phys STEP 2: Noisy search for eq %d\n",eq);  
+    printf("SPD DA: SPD phys STEP 2: Noisy search for eq %d\n",eq);  
 
     // search for noisy pixels:
     nrEnoughStatNoisy += noisyAnalyzer->ProcessNoisyPixels();
@@ -411,15 +428,15 @@ int main(int argc, char **argv) {
 #ifndef SPD_DA_OFF
     daqDA_progressReport((unsigned int)((eq+1)*2.5));
 #else
-    printf("progress: %d\n",(unsigned int)(50+(eq+1)*1.25));
+    printf("SPD DA: progress: %d\n",(unsigned int)(50+(eq+1)*1.25));
 #endif
   }
   // *** *** *** end loop over equipments (eq_id)
 
-  printf("Noisy search finished. %d noisy pixels found. %d chips had enough statistics.\n",
+  printf("SPD DA: Noisy search finished. %d noisy pixels found. %d chips had enough statistics.\n",
         handler->GetNrNoisy(),nrEnoughStatNoisy);
   handler->SetFileLocation(saveDirNoisyToFXS);
-  handler->WriteNoisyToFiles();
+  UInt_t nrNoisyFilesProduced = handler->WriteNoisyToFiles();
 
 
 
@@ -444,7 +461,7 @@ int main(int argc, char **argv) {
     // check data in container
     if (deadAnalyzer->GetEqNr() != eq) {
       if (deadAnalyzer->GetEqNr() != 999) {
-       printf("Error: Mismatching EqId in Dead Container data and filename (%d!=%d). Skipping.\n",
+       printf("SPD DA ERROR: Mismatching EqId in Dead Container data and filename (%d!=%d). Skipping eq.\n",
               deadAnalyzer->GetEqNr(),eq);
       }
       delete deadAnalyzer;
@@ -460,7 +477,7 @@ int main(int argc, char **argv) {
       deadAnalyzer->SetParam(((TObjString*)paramNames.At(i))->GetString().Data(),((TObjString*)paramVals.At(i))->GetString().Data());
     }
 
-    printf("SPD phys STEP 2: Dead search for eq %d\n",eq);  
+    printf("SPD DA: SPD phys STEP 2: Dead search for eq %d\n",eq);  
 
     // search for dead pixels:
     nrEnoughStatChips += deadAnalyzer->ProcessDeadPixels();
@@ -473,38 +490,53 @@ int main(int argc, char **argv) {
 #ifndef SPD_DA_OFF
     daqDA_progressReport((unsigned int)(50+(eq+1)*2.5));
 #else
-    printf("progress: %d\n",(unsigned int)(75+(eq+1)*1.25));
+    printf("SPD DA: progress: %d\n",(unsigned int)(75+(eq+1)*1.25));
 #endif
   }
-  // *** *** *** end loop over equipments (eq_id)
+  // *** *** *** end loop over equipments (eq)
 
 
 
   
-  printf("Dead search finished.\n");
-  printf("%d single dead pixels , %d dead or inactive pixels in total.\n",handler->GetNrDead(),handler->GetNrSilent());
-  printf("%d chips had enough statistics. %d chips are dead. %d chips are inefficient.\n",nrEnoughStatChips,nrDeadChips,nrInefficientChips);
+  printf("SPD DA: Dead search finished.\n");
+  printf("SPD DA: %d single dead pixels , %d dead or inactive pixels in total.\n",handler->GetNrDead(),handler->GetNrSilent());
+  printf("SPD DA: %d chips had enough statistics. %d chips are dead. %d chips are inefficient.\n",nrEnoughStatChips,nrDeadChips,nrInefficientChips);
   handler->SetFileLocation(saveDirDead);
   handler->WriteSilentToFilesAlways();
   handler->SetFileLocation(saveDirDeadToFXS);
   handler->WriteSilentToFilesAlways();
 
 
-  printf("Opening id list file\n");
+  printf("SPD DA: Opening id list file\n");
   TString idsFXSFileName = Form("%s/FXSids_run_%d.txt",saveDirIdsToFXS,runNr);
   ofstream idsFXSfile;
   idsFXSfile.open(idsFXSFileName.Data());
 
 
+  // store dead+inactive pixels in DB, used as starting point for later runs
+#ifndef SPD_DA_OFF
+  for (UInt_t eq=0; eq<20; eq++) {
+    Int_t storePreviousDead_status = 0;
+    TString idpd = Form("spd_previous_dead_%d",eq);
+    TString fileName = Form("%s/SPD_Dead_%d.root",saveDirDead,eq);
+    storePreviousDead_status = daqDA_DB_storeFile(fileName.Data(),idpd.Data());
+    //    printf("daqDA_DB_storeFile(%s,%s)\n",fileName.Data(),idpd.Data());
+    if (par_status) {
+      printf("SPD DA ERROR: Failed to store dead file %s in daqDetDB: status=%d.\n",idpd.Data(),storePreviousDead_status);
+    }
+  }
+#endif
+
+
   // send (dead) reference data for this run to FXS - only if there is no chip in category "needsMoreStat"
-  if (nrEnoughStatChips+nrDeadChips+nrInefficientChips == 1200) {
-    printf("Dead calibration is complete.\n");    // calibration is complete
-    printf("Preparing dead reference data\n");
+  if (nrEnoughStatChips>0 && nrEnoughStatChips+nrDeadChips+nrInefficientChips == 1200) {
+    printf("SPD DA: Dead calibration is complete.\n");
+    printf("SPD DA: Preparing dead reference data\n");
     // send reference data for dead pixels to FXS
     TString tarFiles = "";
     for (UInt_t eq=0; eq<20; eq++) {
       if (eqActiveDead[eq]) {
-       printf("Preparing dead pixels for eq %d\n",eq);
+       printf("SPD DA: Preparing dead pixels for eq %d\n",eq);
        // move file to ref dir
        TString fileName = Form("%s/SPDphys_dead_run_0_0_eq_%d.root",saveDirDeadRefTmp,eq);
        TString newFileName = Form("%s/SPDphys_dead_run_%d_%d_eq_%d.root",saveDirDeadRef,firstRunNrDead,runNr,eq);
@@ -514,58 +546,61 @@ int main(int argc, char **argv) {
        tarFiles.Append(Form("SPDphys_dead_run_%d_%d_eq_%d.root ",firstRunNrDead,runNr,eq));
       }
     }
-    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);
-    TString id = "SPD_ref_phys_dead";
+    if  (tarFiles.Length() > 0) {   // make sure there are any 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);
+      TString id = "SPD_ref_phys_dead";
 #ifndef SPD_DA_OFF
-    status = daqDA_FES_storeFile(fileName.Data(),id.Data());
-    if (status!=0) {
-      printf("Failed to export file %s , status %d\n",fileName.Data(),status);
-      return -1;
-    }
+      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;
+      }
 #endif
-    idsFXSfile << Form("%s\n",id.Data());
+      idsFXSfile << Form("%s\n",id.Data());
+    }
   }
 
 
 
   // send (noisy) reference data for this run to FXS
-  printf("Preparing noisy reference data\n");
+  printf("SPD DA: Preparing noisy reference data\n");
   TString tarFiles = "";
   for (UInt_t eq=0; eq<20; eq++) {
     if (eqActiveNoisy[eq]) {
       tarFiles.Append(Form("SPDphys_run_%d_eq_%d.root ",runNr,eq));
     }
   }
-  TString send_command = Form("cd %s; tar -cf ref_phys.tar %s",saveDirNoisyRef,tarFiles.Data());
-  system(send_command.Data());
-  TString fileName = Form("%s/ref_phys.tar",saveDirNoisyRef);
-  TString id = "SPD_ref_phys";
+  if  (tarFiles.Length() > 0) {   // make sure there are any files to send
+    TString send_command = Form("cd %s; tar -cf ref_phys.tar %s",saveDirNoisyRef,tarFiles.Data());
+    system(send_command.Data());
+    TString fileName = Form("%s/ref_phys.tar",saveDirNoisyRef);
+    TString id = "SPD_ref_phys";
 #ifndef SPD_DA_OFF
-  status = daqDA_FES_storeFile(fileName.Data(),id.Data());
-  if (status!=0) {
-    printf("Failed to export file %s , status %d\n",fileName.Data(),status);
-    return -1;
-  }
+    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;
+    }
 #endif
-  idsFXSfile << Form("%s\n",id.Data());
-
+    idsFXSfile << Form("%s\n",id.Data());
+  }
 
 
 
   // send dead pixels to FXS
-  printf("Preparing dead files\n");
+  printf("SPD DA: Preparing dead files for FXS\n");
   // send a tared file of all the dead files
-  send_command = Form("cd %s; tar -cf dead_phys.tar *",saveDirDeadToFXS);
+  TString send_command = Form("cd %s; tar -cf dead_phys.tar *",saveDirDeadToFXS);
   //  printf("\n\n%s\n\n",command.Data());
   system(send_command.Data());
-  fileName = Form("%s/dead_phys.tar",saveDirDeadToFXS);
-  id = "SPD_phys_dead";
+  TString fileName = Form("%s/dead_phys.tar",saveDirDeadToFXS);
+  TString id = "SPD_phys_dead";
 #ifndef SPD_DA_OFF
   Int_t send_status = daqDA_FES_storeFile(fileName.Data(),id.Data());
   if (send_status!=0) {
-    printf("Failed to export file %s , status %d\n",fileName.Data(),send_status);
+    printf("SPD DA ERROR: Failed to export file %s , status %d\n",fileName.Data(),send_status);
     return -1;
   }
 #endif
@@ -574,8 +609,8 @@ int main(int argc, char **argv) {
 
 
   // send noisy pixels to FXS
-  if (handler->GetNrNoisy()>0) { // there must be at least one file created
-    printf("Preparing noisy files\n");
+  if (nrNoisyFilesProduced > 0) {   // make sure there is at least one file created
+    printf("SPD DA: Preparing noisy files for FXS\n");
     // 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());
@@ -585,7 +620,7 @@ int main(int argc, char **argv) {
 #ifndef SPD_DA_OFF
     status = daqDA_FES_storeFile(fileName.Data(),id.Data());
     if (status!=0) {
-      printf("Failed to export file %s , status %d\n",fileName.Data(),status);
+      printf("SPD DA ERROR: Failed to export file %s , status %d\n",fileName.Data(),status);
       return -1;
     }
 #endif
@@ -600,7 +635,7 @@ int main(int argc, char **argv) {
 #ifndef SPD_DA_OFF
   status = daqDA_FES_storeFile(idsFXSFileName.Data(),id.Data());
   if (status!=0) {
-    printf("Failed to export file %s , status %d\n",idsFXSFileName.Data(),status);
+    printf("SPD DA ERROR: Failed to export file %s , status %d\n",idsFXSFileName.Data(),status);
     return -1;
   }
 #endif