Improvements and bug fixes for DAs and Preprocessor (H. Tydesjo)
authormasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 19 Nov 2007 17:18:05 +0000 (17:18 +0000)
committermasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 19 Nov 2007 17:18:05 +0000 (17:18 +0000)
ITS/AliITSOnlineCalibrationSPDhandler.cxx
ITS/AliITSOnlineSPDscanAnalyzer.cxx
ITS/AliITSOnlineSPDscanAnalyzer.h
ITS/AliITSPreprocessorSPD.cxx
ITS/AliITSPreprocessorSPD.h
ITS/ITSSPDPHYSda.cxx
ITS/ITSSPDSCANda.cxx

index 9e4642d..898f067 100644 (file)
@@ -22,6 +22,7 @@
 #include "AliCDBEntry.h"
 #endif
 
+/* $Id$ */
 //____________________________________________________________________________________________
 AliITSOnlineCalibrationSPDhandler::AliITSOnlineCalibrationSPDhandler():
   fFileLocation(".")
@@ -639,7 +640,7 @@ void AliITSOnlineCalibrationSPDhandler::GenerateDCSConfigFile(const Char_t* file
   dcsfile << "RunNumber=" << "0" << "\n"; // dummy value
   dcsfile << "Type=" << "4" << "\n";
   dcsfile << "Router=" << "0" << "\n"; // dummy value
-  dcsfile << "ActualDetCoonfiguration=" << "0,-1,-1\n"; // dummy values
+  dcsfile << "ActualDetConfiguration=" << "0,-1,-1\n"; // dummy values
   dcsfile << "[NOISY]\n";
   for (UInt_t module=0; module<240; module++) {
     UInt_t headkey=20*10*6;
index f801c8b..7da36f9 100644 (file)
@@ -251,12 +251,13 @@ void AliITSOnlineSPDscanAnalyzer::ReadParamsFromLocation(const Char_t *dirName)
   }
 }
 
-Bool_t AliITSOnlineSPDscanAnalyzer::IsModuleScanned(UInt_t module) const {
-  // is this module scanned?
-  if (module<240) {
-    return fbModuleScanned[module];
+Bool_t AliITSOnlineSPDscanAnalyzer::IsChipPresent(UInt_t hs, UInt_t chipNr) {
+  // is the chip present?
+  if (fScanObj==NULL) {
+    Warning("AliITSOnlineSPDscanAnalyzer::IsChipPresent","No data!");
+    return kFALSE;
   }
-  return kFALSE;
+  return fScanObj->GetChipPresent(hs,chipNr);
 }
 
 Bool_t AliITSOnlineSPDscanAnalyzer::ProcessDeadPixels(/*Char_t *oldcalibDir*/) {
@@ -283,13 +284,7 @@ Bool_t AliITSOnlineSPDscanAnalyzer::ProcessDeadPixels(/*Char_t *oldcalibDir*/) {
   for (UInt_t hs=0; hs<6; hs++) {
     for (UInt_t chipNr=0; chipNr<10; chipNr++) {
       if (fScanObj->GetChipPresent(hs,chipNr) && fScanObj->GetAverageMultiplicity(0,hs,chipNr)>0) { // check the status of the chippresent parameter in the mood header!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-       UInt_t module = AliITSRawStreamSPD::GetModuleNumber(routerNr,hs,chipNr);
-       if (!fbModuleScanned[module]) {
-         fbModuleScanned[module]=kTRUE;
-         //      fHandler[module]->SetFileLocation(oldcalibDir);
-         //      fHandler[module]->ReadFromFile(module);
-         if (fOverWrite) {fHandler->ResetDeadForChip(routerNr,hs,chipNr);}
-       }
+       if (fOverWrite) {fHandler->ResetDeadForChip(routerNr,hs,chipNr);}
        for (UInt_t col=0; col<32; col++) {
          for (UInt_t row=rowStart; row<=rowEnd; row++) {
            if (col!=1 && col!=9 && col!=17 && col!=25) { //exclude test columns!!!
@@ -333,11 +328,7 @@ Bool_t AliITSOnlineSPDscanAnalyzer::ProcessNoisyPixels(/*Char_t *oldcalibDir*/)
   for (UInt_t hs=0; hs<6; hs++) {
     for (UInt_t chipNr=0; chipNr<10; chipNr++) {
       if (fScanObj->GetChipPresent(hs,chipNr)) { // check the status of the chippresent parameter in the mood header!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-       UInt_t module = AliITSRawStreamSPD::GetModuleNumber(routerNr,hs,chipNr);
-       if (!fbModuleScanned[module]) {
-         fbModuleScanned[module]=kTRUE;
-         if (fOverWrite) {fHandler->ResetNoisyForChip(routerNr,hs,chipNr);}
-       }
+       if (fOverWrite) {fHandler->ResetNoisyForChip(routerNr,hs,chipNr);}
        for (UInt_t col=0; col<32; col++) {
          for (UInt_t row=0; row<256; row++) {
            if (fScanObj->GetHitsEfficiency(0,hs,chipNr,col,row)>fNoiseThreshold) {
index a03cc72..58cd764 100644 (file)
@@ -29,7 +29,7 @@ class AliITSOnlineSPDscanAnalyzer {
 
   AliITSOnlineSPDscanAnalyzer& operator=(const AliITSOnlineSPDscanAnalyzer& handle);
 
-  Bool_t     IsModuleScanned(UInt_t module) const;
+  Bool_t     IsChipPresent(UInt_t hs, UInt_t chipNr);
   Bool_t     IsOverWriteSet() const {return fOverWrite;}
   void       SetCalibHandler(AliITSOnlineCalibrationSPDhandler *handler) {fHandler=handler;}
   void       SetParam(const Char_t *pname, const Char_t *pval);
index 15e65d9..491f0ee 100644 (file)
 #include <TTimeStamp.h>
 #include <TObjString.h>
 #include <TSystem.h>
-#include <TList.h>
+#include <fstream>
+
+/* $Id$ */
 
 ClassImp(AliITSPreprocessorSPD)
 
 //______________________________________________________________________________________________
 AliITSPreprocessorSPD::AliITSPreprocessorSPD(AliShuttleInterface* shuttle) :
-  AliPreprocessor("SPD", shuttle)
+  AliPreprocessor("SPD", shuttle), fIdList()
 {
   // constructor
+  fIdList.SetOwner(kTRUE);
 }
 
 //______________________________________________________________________________________________
@@ -53,9 +56,58 @@ UInt_t AliITSPreprocessorSPD::Process(TMap* /*dcsAliasMap*/)
 
   TString runType = GetRunType();
 
+
+  fIdList.Clear();
   UInt_t nrEqForScan  = 0;
-  UInt_t nrEqForPhysN = 0;
-  UInt_t nrEqForPhysD = 0;
+  //  UInt_t nrEqForPhysN = 0;
+  //  UInt_t nrEqForPhysD = 0;
+
+  // ******************************************************************************************** //
+  // *** GET THE FILE IDs FOR DEBUGGING *** //
+  if (runType == "DAQ_MIN_TH_SCAN" || 
+      runType == "DAQ_MEAN_TH_SCAN" || 
+      runType == "DAQ_UNIFORMITY_SCAN" || 
+      runType == "DAQ_NOISY_PIX_SCAN" || 
+      runType == "DAQ_PIX_DELAY_SCAN" || 
+      runType == "DAQ_FO_UNIF_SCAN" || 
+      runType == "PHYSICS") {
+    TString idListId = "SPD_id_list";
+    TList* list = GetFileSources(kDAQ,idListId.Data());
+    UInt_t nrIdFiles = 0;
+    if (list) {
+      TListIter *iter = new TListIter(list);
+      while (TObjString* fileNameEntry = (TObjString*) iter->Next()) {
+       TString fileName = GetFile(kDAQ, idListId.Data(), fileNameEntry->GetString().Data());
+       if (fileName.IsNull()) {
+         Log(Form("GetFile failed to retrieve file %s.",fileNameEntry->GetString().Data()));
+         return 1;
+       }
+       nrIdFiles++;
+       ifstream idFile;
+       idFile.open(fileName.Data(), ifstream::in);
+       if (idFile.fail()) {
+         Log(Form("Could not open file (%s) for reading.",fileName.Data()));
+         return 1;
+       }
+       else {
+         while(1) {
+           Char_t id[50];
+           idFile >> id;
+           if (idFile.eof()) break;
+           // Add id to the list;
+           fIdList.AddLast(new TObjString(id));
+         }
+       }
+       idFile.close();
+      }
+      delete iter;
+    }
+    if (nrIdFiles==0) {
+      Log("Failed to retrieve any id list file.");
+      return 1;
+    }
+  }
+
 
   // ******************************************************************************************** //
   // *** REFERENCE DATA *** //
@@ -76,6 +128,13 @@ UInt_t AliITSPreprocessorSPD::Process(TMap* /*dcsAliasMap*/)
        if (fileNameEntry!=NULL) {
          nrEqForScan++;
          TString fileName = GetFile(kDAQ, id, fileNameEntry->GetString().Data());
+         if (fileName.IsNull()) {
+           Log(Form("GetFile failed to retrieve file %s.",fileNameEntry->GetString().Data()));
+           return 1;
+         }
+         if (!RemoveIdFromList(id.Data())) {
+           Log(Form("Warning: Retrieved file with id %s, that was not in the id list!",id.Data()));
+         }
          TString refCAT = Form("SPD_ref_scan_eq_%d",eq);
          if (!StoreReferenceFile(fileName.Data(),refCAT.Data())) {
            Log(Form("Failed to store reference file %s.",fileName.Data()));
@@ -88,42 +147,67 @@ UInt_t AliITSPreprocessorSPD::Process(TMap* /*dcsAliasMap*/)
 
   // Physics runs (online monitoring):
   if (runType == "PHYSICS") {
-    // Store the phys "per run" container files as reference data (0 or 1 file for each equipment)
-    for (UInt_t eq=0; eq<20; eq++) {
-      TString id = Form("SPD_ref_phys_%d",eq);
-      TList* list = GetFileSources(kDAQ,id.Data()); // (the id should be unique, so always 1 file)
-      if (list) {
-       TObjString* fileNameEntry = (TObjString*) list->First();
-       if (fileNameEntry!=NULL) {
-         nrEqForPhysN++;
-         TString fileName = GetFile(kDAQ, id, fileNameEntry->GetString().Data());
-         TString refCAT = Form("SPD_ref_phys_eq_%d",eq);
-         if (!StoreReferenceFile(fileName.Data(),refCAT.Data())) {
-           Log(Form("Failed to store reference file %s.",fileName.Data()));
-           return 1;
-         }
-       }
-      }
-    }
-    // Store the phys "dead" container files as reference data (0 or 1 file for each equipment)
-    for (UInt_t eq=0; eq<20; eq++) {
-      TString id = Form("SPD_ref_phys_dead_%d",eq);
-      TList* list = GetFileSources(kDAQ,id.Data()); // (the id should be unique, so always 1 file)
-      if (list) {
-       TObjString* fileNameEntry = (TObjString*) list->First();
-       if (fileNameEntry!=NULL) {
-         nrEqForPhysD++;
-         TString fileName = GetFile(kDAQ, id, fileNameEntry->GetString().Data());
-         TString refCAT = Form("SPD_ref_phys_dead_eq_%d",eq);
-         if (!StoreReferenceFile(fileName.Data(),refCAT.Data())) {
-           Log(Form("Failed to store reference file %s.",fileName.Data()));
-           return 1;
-         }
-       }
-      }
-    }
+    // Store the phys "per run" container files as reference data
+    if (!StoreRefFromTarForId("SPD_ref_phys")) return 1;
+    // Store the phys "dead" container files as reference data
+    if (!StoreRefFromTarForId("SPD_ref_phys_dead")) return 1;
   }
 
+
+// *** OLD CODE NOT TARED
+//    for (UInt_t eq=0; eq<20; eq++) {
+//      TString id = Form("SPD_ref_phys_%d",eq);
+//      TList* list = GetFileSources(kDAQ,id.Data()); // (the id should be unique, so always 1 file)
+//      if (list) {
+//     TObjString* fileNameEntry = (TObjString*) list->First();
+//     if (fileNameEntry!=NULL) {
+//       nrEqForPhysN++;
+//       TString fileName = GetFile(kDAQ, id, fileNameEntry->GetString().Data());
+//       if (fileName.IsNull()) {
+//         Log(Form("GetFile failed to retrieve file %s.",fileNameEntry->GetString().Data()));
+//         return 1;
+//       }
+//       if (!RemoveIdFromList(id.Data())) {
+//         Log(Form("Warning: Retrieved file with id %s, that was not in the id list!",id.Data()));
+//       }
+//       TString refCAT = Form("SPD_ref_phys_eq_%d",eq);
+//       if (!StoreReferenceFile(fileName.Data(),refCAT.Data())) {
+//         Log(Form("Failed to store reference file %s.",fileName.Data()));
+//         return 1;
+//       }
+//     }
+//      }
+//    }
+// ***
+
+// *** OLD CODE NOT TARED
+//    // Store the phys "dead" container files as reference data (0 or 1 file for each equipment)
+//    for (UInt_t eq=0; eq<20; eq++) {
+//      TString id = Form("SPD_ref_phys_dead_%d",eq);
+//      TList* list = GetFileSources(kDAQ,id.Data()); // (the id should be unique, so always 1 file)
+//      if (list) {
+//     TObjString* fileNameEntry = (TObjString*) list->First();
+//     if (fileNameEntry!=NULL) {
+//       nrEqForPhysD++;
+//       TString fileName = GetFile(kDAQ, id, fileNameEntry->GetString().Data());
+//       if (fileName.IsNull()) {
+//         Log(Form("GetFile failed to retrieve file %s.",fileNameEntry->GetString().Data()));
+//         return 1;
+//       }
+//       if (!RemoveIdFromList(id.Data())) {
+//         Log(Form("Warning: Retrieved file with id %s, that was not in the id list!",id.Data()));
+//       }
+//       TString refCAT = Form("SPD_ref_phys_dead_eq_%d",eq);
+//       if (!StoreReferenceFile(fileName.Data(),refCAT.Data())) {
+//         Log(Form("Failed to store reference file %s.",fileName.Data()));
+//         return 1;
+//       }
+//     }
+//      }
+//    }
+//  }
+// ***
+
   // ******************************************************************************************** //
 
 
@@ -132,12 +216,20 @@ UInt_t AliITSPreprocessorSPD::Process(TMap* /*dcsAliasMap*/)
   // Standalone runs:
   if (runType == "DAQ_NOISY_PIX_SCAN") {
     // Retrieve and unpack tared calibration files from FXS
-    TList* list = GetFileSources(kDAQ,"SPD_scan_noisy");
+    TString id = "SPD_scan_noisy";
+    TList* list = GetFileSources(kDAQ,id.Data());
     if (list) {
       UInt_t index = 0;
       while (list->At(index)!=NULL) {
        TObjString* fileNameEntry = (TObjString*) list->At(index);
-       TString fileName = GetFile(kDAQ, "SPD_scan_noisy", fileNameEntry->GetString().Data());
+       TString fileName = GetFile(kDAQ, id.Data(), fileNameEntry->GetString().Data());
+       if (fileName.IsNull()) {
+         Log(Form("GetFile failed to retrieve file %s.",fileNameEntry->GetString().Data()));
+         return 1;
+       }
+       if (!RemoveIdFromList("SPD_scan_noisy")) {
+         Log(Form("Warning: Retrieved file with id %s, that was not in the id list!",id.Data()));
+       }
        TString command = Form("tar -xf %s",fileName.Data());
        gSystem->Exec(command.Data());
        index++;
@@ -193,12 +285,20 @@ UInt_t AliITSPreprocessorSPD::Process(TMap* /*dcsAliasMap*/)
     AliITSOnlineCalibrationSPDhandler* handOld = new AliITSOnlineCalibrationSPDhandler();
     handOld->ReadNoisyFromCalibObj(spdEntryNoisy);
     // Retrieve and unpack tared calibration files from FXS
-    TList* listN = GetFileSources(kDAQ,"SPD_phys_noisy");
+    TString idN = "SPD_phys_noisy";
+    TList* listN = GetFileSources(kDAQ,idN.Data());
     if (listN) {
       UInt_t index = 0;
       while (listN->At(index)!=NULL) {
        TObjString* fileNameEntry = (TObjString*) listN->At(index);
-       TString fileName = GetFile(kDAQ, "SPD_phys_noisy", fileNameEntry->GetString().Data());
+       TString fileName = GetFile(kDAQ, idN.Data(), fileNameEntry->GetString().Data());
+       if (fileName.IsNull()) {
+         Log(Form("GetFile failed to retrieve file %s.",fileNameEntry->GetString().Data()));
+         return 1;
+       }
+       if (!RemoveIdFromList(idN.Data())) {
+         Log(Form("Warning: Retrieved file with id %s, that was not in the id list!",idN.Data()));
+       }
        TString command = Form("tar -xf %s",fileName.Data());
        gSystem->Exec(command.Data());
        index++;
@@ -232,17 +332,31 @@ UInt_t AliITSPreprocessorSPD::Process(TMap* /*dcsAliasMap*/)
 
     // Dead pixels:
     // Retrieve and unpack tared calibration files from FXS
-    TList* listD = GetFileSources(kDAQ,"SPD_phys_dead");
+    TString idD = "SPD_phys_dead";
+    TList* listD = GetFileSources(kDAQ,idD.Data());
+    UInt_t nrPhysDeadFiles = 0;
     if (listD) {
       UInt_t index = 0;
       while (listD->At(index)!=NULL) {
        TObjString* fileNameEntry = (TObjString*) listD->At(index);
-       TString fileName = GetFile(kDAQ, "SPD_phys_dead", fileNameEntry->GetString().Data());
+       TString fileName = GetFile(kDAQ, idD.Data(), fileNameEntry->GetString().Data());
+       if (fileName.IsNull()) {
+         Log(Form("GetFile failed to retrieve file %s.",fileNameEntry->GetString().Data()));
+         return 1;
+       }
+       nrPhysDeadFiles++;
+       if (!RemoveIdFromList("SPD_phys_dead")) {
+         Log(Form("Warning: Retrieved file with id %s, that was not in the id list!",idD.Data()));
+       }
        TString command = Form("tar -xf %s",fileName.Data());
        gSystem->Exec(command.Data());
        index++;
       }
     }
+    if (nrPhysDeadFiles==0) {
+      Log(Form("Could not find files with id %s. Should be present for each run.",idD.Data()));
+      return 1;
+    }
     // Create new database entries
     TObjArray* spdEntryDead = new TObjArray(240);
     spdEntryDead->SetOwner(kTRUE);
@@ -275,7 +389,111 @@ UInt_t AliITSPreprocessorSPD::Process(TMap* /*dcsAliasMap*/)
   }
 
 
+  // check that there are no ids left in the list:
+  if (fIdList.First()!=NULL) {
+    TString logMessage = "";
+    TListIter *iter = new TListIter(&fIdList);
+    while (TObjString *st = (TObjString*)iter->Next()) {
+      logMessage.Append(st->GetString());
+      logMessage.Append(" ");
+    }
+    delete iter;
+    Log(Form("Files with the following ids were never retrieved: %s.",logMessage.Data()));
+    return 1;
+  }
+
+  fIdList.Clear();
+
   return 0; // 0 means success
 
 }
-
+//_________________________________________________________________________________________
+Bool_t AliITSPreprocessorSPD::RemoveIdFromList(const Char_t *id) {
+  // removes id from the list of ids
+  Bool_t found = kFALSE;
+  TListIter *iter = new TListIter(&fIdList);
+  while (TObjString *st = (TObjString*)iter->Next()) {
+    if (st->GetString().CompareTo(id)==0) {
+      fIdList.Remove(st);
+      found = kTRUE;
+      break;
+    }
+  }
+  delete iter;
+  return found;
+}
+//_________________________________________________________________________________________
+Bool_t AliITSPreprocessorSPD::StoreRefFromTarForId(const Char_t *id) {
+  // store reference files from tar file for the id given (this is just to not duplicate code)
+  TList* list = GetFileSources(kDAQ,id);
+  if (list) {
+    UInt_t index = 0;
+    while (list->At(index)!=NULL) {
+      TObjString* fileNameEntry = (TObjString*) list->At(index);
+      TString fileName = GetFile(kDAQ, id, fileNameEntry->GetString().Data());
+      if (fileName.IsNull()) {
+       Log(Form("GetFile failed to retrieve file %s.",fileNameEntry->GetString().Data()));
+       return kFALSE;
+      }
+      if (!RemoveIdFromList(id)) {
+       Log(Form("Warning: Retrieved file with id %s, that was not in the id list!",id));
+      }
+      // get the file names from the tar file
+      //      TString pwd = gSystem->pwd();
+      //      TString tempFileName = Form("%s/tempTar.txt",pwd.Data());
+      TString tempFileName = "tempTar.txt";
+      TString command = Form("tar -tf %s > %s",fileName.Data(),tempFileName.Data());
+      gSystem->Exec(command.Data());
+      TList fList;
+      ifstream tempFile;
+      tempFile.open(tempFileName.Data(), ifstream::in);
+      if (tempFile.fail()) {
+       Log(Form("Could not open file (%s) for reading.",tempFileName.Data()));
+       return kFALSE;
+      }
+      else {
+       while(1) {
+         Char_t fileN[100];
+         tempFile >> fileN;
+         if (tempFile.eof()) break;
+         fList.AddLast(new TObjString(fileN));
+       }
+      }
+      // close and remove temp file
+      tempFile.close();
+      command = Form("rm -f %s",tempFileName.Data());
+      gSystem->Exec(command.Data());
+      // unpack
+      command = Form("tar -xf %s",fileName.Data());
+      gSystem->Exec(command.Data());
+      // store each file
+      UInt_t index2 = 0;
+      while (fList.At(index2)!=NULL) {
+       TString fileName = ((TObjString*)fList.At(index2))->GetString();
+       // get eq id
+       TString eqStr = fileName.Data();
+       UInt_t len = eqStr.Length();
+       eqStr.Replace(0,len-7,"",0);
+       eqStr.ReplaceAll("_",1,"",0);
+       eqStr.ReplaceAll(".root",5,"",0);
+       Int_t eqId = eqStr.Atoi();
+       if (eqId>=0 && eqId<20) {
+         TString refCAT = Form("%s_eq_%d",id,eqId);
+         if (!StoreReferenceFile(fileName.Data(),refCAT.Data())) {
+           Log(Form("Failed to store reference file %s.",fileName.Data()));
+           return kFALSE;
+         }
+       }
+       else {
+         Log(Form("Eq ID %d out of bounds for file %s",eqId,fileName.Data()));
+         fList.Clear();
+         return kFALSE;
+       }
+       index2++;
+      }
+      fList.Clear();
+      index++;
+    }
+  }
+  return kTRUE;
+}
index 37e7ea3..b801c87 100644 (file)
@@ -7,7 +7,10 @@
 //                                           //
 ///////////////////////////////////////////////
 
+/* $Id$ */
+
 #include "AliPreprocessor.h"
+#include <TList.h>
 
 class AliITSPreprocessorSPD : public AliPreprocessor
 {
@@ -20,6 +23,9 @@ class AliITSPreprocessorSPD : public AliPreprocessor
     virtual UInt_t Process(TMap* dcsAliasMap);
 
   private:
+    TList  fIdList; // list of ids for files that should be retrieved from FXS
+    Bool_t RemoveIdFromList(const Char_t *id);
+    Bool_t StoreRefFromTarForId(const Char_t *id);
 
     ClassDef(AliITSPreprocessorSPD, 0);
 };
index 15a4ef2..a50049d 100644 (file)
@@ -45,19 +45,23 @@ int main(int argc, char **argv) {
   }
 
   // directory structure, hard coded
-  char *saveDirDeadToFXS     = "./calibResults/DeadToFXS";        // may NOT delete content
+  char *saveDirDead          = "./calibResults/Dead";             // may NOT delete content
+  char *saveDirDeadToFXS     = "./calibResults/DeadToFXS";        //     may delete content
   char *saveDirDeadRef       = "./calibResults/DeadReference";    //     may delete content
   char *saveDirDeadRefTmp    = "./calibResults/DeadReferenceTmp"; // may NOT delete content
   char *saveDirNoisyToFXS    = "./calibResults/NoisyToFXS";       //     may delete content
   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:
   system("mkdir ./calibResults >& /dev/null");
+  system("mkdir ./calibResults/Dead >& /dev/null");
   system("mkdir ./calibResults/DeadToFXS >& /dev/null");
   system("mkdir ./calibResults/DeadReference >& /dev/null");
   system("mkdir ./calibResults/DeadReferenceTmp >& /dev/null");
   system("mkdir ./calibResults/NoisyToFXS >& /dev/null");
   system("mkdir ./calibResults/NoisyReference >& /dev/null");
+  system("mkdir ./calibResults/IdsToFXS >& /dev/null");
   system("mkdir ./configFiles >& /dev/null");
   // parameters config file
   TString paramsFileName = Form("%s/physics_params.txt",configFilesDir);
@@ -268,14 +272,14 @@ int main(int argc, char **argv) {
   TString command;
   command = Form("cd %s; rm -f *",saveDirNoisyToFXS);
   system(command.Data());
-  // delete dead.tar file
-  command = Form("cd %s; rm -f dead.tar",saveDirDeadToFXS);
+  // clear deadToFXS dir:
+  command = Form("cd %s; rm -f *",saveDirDeadToFXS);
   system(command.Data());
 
 
   // create calibration handler and read dead from previous calibrations
   AliITSOnlineCalibrationSPDhandler* handler = new AliITSOnlineCalibrationSPDhandler();
-  handler->SetFileLocation(saveDirDeadToFXS);
+  handler->SetFileLocation(saveDirDead);
   handler->ReadDeadFromFiles();
 
 
@@ -328,14 +332,13 @@ int main(int argc, char **argv) {
       }
     }
     // remove noisy pixels from dead hitmap
-    for (UInt_t iModule=0; iModule<12; iModule++) {
-      UInt_t module = AliITSRawStreamSPD::GetModuleNumber(eqId,iModule);
-      for (UInt_t ind=0; ind<handler->GetNrNoisy(module); ind++) {
-       UInt_t hs   = handler->GetNoisyHSAt(module,ind);
-       UInt_t chip = handler->GetNoisyChipAt(module,ind);
-       UInt_t col  = handler->GetNoisyColAt(module,ind);
-       UInt_t row  = handler->GetNoisyRowAt(module,ind);
-       physObj->AddHits(hs,chip,col,row,-noisyAnalyzer->GetOnlinePhys()->GetHits(hs,chip,col,row));
+    for (UInt_t hs=0; hs<6; hs++) {
+      for (UInt_t chip=0; chip<10; chip++) {
+       for (UInt_t ind=0; ind<handler->GetNrNoisyC(eqId,hs,chip); ind++) {
+         UInt_t col  = handler->GetNoisyColAtC(eqId,hs,chip,ind);
+         UInt_t row  = handler->GetNoisyRowAtC(eqId,hs,chip,ind);
+         physObj->AddHits(hs,chip,col,row,-noisyAnalyzer->GetOnlinePhys()->GetHits(hs,chip,col,row));
+       }
       }
     }
 
@@ -413,98 +416,173 @@ int main(int argc, char **argv) {
 
   
   printf("Dead search finished. %d dead pixels in total.\n%d chips (%d) had enough statistics. %d chips were dead. %d chips were inefficient.\n",handler->GetNrDead(),nrEnoughStatChips,nrEqActiveDead*60,nrDeadChips,nrInefficientChips);
-  handler->SetFileLocation(saveDirDeadToFXS);
+  handler->SetFileLocation(saveDirDead);
   handler->WriteDeadToFilesAlways();
-  
-
-
-
-
 
+  handler->SetFileLocation(saveDirDeadToFXS);
+  handler->WriteDeadToFilesAlways();
+// *** old code (used if not all dead data should be uploaded)
+//  UInt_t nrDeadFilesToTar = 0;
+//  handler->SetFileLocation(saveDirDeadToFXS);
+//  for (UInt_t eqId=0; eqId<20; eqId++) {
+//    if (eqActiveDead[eqId]) {
+//      handler->WriteDeadToFile(eqId);
+//      nrDeadFilesToTar++;
+//    }
+//  }
+//***  
+
+  TString idsFXSFileName = Form("%s/FXSids_run_%d.txt",saveDirIdsToFXS,runNr);
+  ofstream idsFXSfile;
+  idsFXSfile.open(idsFXSFileName.Data());
 
 
   // if there is no chip in category "needsMoreStat"
   if (nrEnoughStatChips+nrDeadChips+nrInefficientChips == nrEqActiveDead*60) {
     // calibration is complete
     printf("Dead calibration is complete.\n");
+
+
+
+    // send reference data for dead pixels to FXS
+    TString tarFiles = "";
     for (UInt_t eqId=0; eqId<20; eqId++) {
       if (eqActiveDead[eqId]) {
-       TString fileName = Form("%s/SPDphys_dead_run_0_0_eq_%d.root",saveDirDeadRefTmp,eqId);
-//!!!  // find out the run span
-//!!!  AliITSOnlineSPDphys* physObj = new AliITSOnlineSPDphys(fileName.Data());
-//!!!  UInt_t nrRuns = physObj->GetNrRuns();
-//!!!  UInt_t firstRun = physObj->GetRunNr(0);
-//!!!  UInt_t lastRun = physObj->GetRunNr(nrRuns-1);
-//!!!  delete physObj;
        // move file to ref dir
+       TString fileName = Form("%s/SPDphys_dead_run_0_0_eq_%d.root",saveDirDeadRefTmp,eqId);
        TString newFileName = Form("%s/SPDphys_dead_run_%d_%d_eq_%d.root",saveDirDeadRef,firstRunNrDead,runNr,eqId);
        TString command = Form("mv -f %s %s",fileName.Data(),newFileName.Data());
        system(command.Data());
-#ifndef SPD_DA_OFF
-       // send ref data to FXS
-       TString id = Form("SPD_ref_phys_dead_%d",eqId);
-       Int_t status = daqDA_FES_storeFile(newFileName.Data(),id.Data());
-       if (status!=0) {
-         printf("Failed to export file %s , status %d\n",newFileName.Data(),status);
-         return -1;
-       }
-#endif
-      }
-      else {
-       TString command = Form("rm -f %s/SPDphys_dead_run_0_0_eq_%d.root",saveDirDeadRefTmp,eqId);
-       system(command.Data());
+
+       tarFiles.Append(Form("SPDphys_dead_run_%d_%d_eq_%d.root ",firstRunNrDead,runNr,eqId));
       }
     }
+    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
+    Int_t 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;
+    }
+#endif
+    idsFXSfile << Form("%s\n",id.Data());
+//    for (UInt_t eqId=0; eqId<20; eqId++) { // OLD CODE NOT TARED
+//      if (eqActiveDead[eqId]) {
+//     TString fileName = Form("%s/SPDphys_dead_run_0_0_eq_%d.root",saveDirDeadRefTmp,eqId);
+//     // move file to ref dir
+//     TString newFileName = Form("%s/SPDphys_dead_run_%d_%d_eq_%d.root",saveDirDeadRef,firstRunNrDead,runNr,eqId);
+//     TString command = Form("mv -f %s %s",fileName.Data(),newFileName.Data());
+//     system(command.Data());
+//     // send ref data to FXS
+//     TString id = Form("SPD_ref_phys_dead_%d",eqId);
+//#ifndef SPD_DA_OFF
+//     Int_t status = daqDA_FES_storeFile(newFileName.Data(),id.Data());
+//     if (status!=0) {
+//       printf("Failed to export file %s , status %d\n",newFileName.Data(),status);
+//       return -1;
+//     }
+//#endif
+//     idsFXSfile << Form("%s\n",id.Data());
+//      }
+//      else {
+//     TString command = Form("rm -f %s/SPDphys_dead_run_0_0_eq_%d.root",saveDirDeadRefTmp,eqId);
+//     system(command.Data());
+//      }
+//    }
   }
 
+
   // send reference data for this run to FXS
-#ifndef SPD_DA_OFF
+  TString tarFiles = "";
   for (UInt_t eqId=0; eqId<20; eqId++) {
     if (eqActiveNoisy[eqId]) {
-      TString fileName = Form("%s/SPDphys_run_%d_eq_%d.root",saveDirNoisyRef,runNr,eqId);
-      TString id = Form("SPD_ref_phys_%d",eqId);
-      Int_t 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;
-      }
+      tarFiles.Append(Form("SPDphys_run_%d_eq_%d.root ",runNr,eqId));
     }
   }
+  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
+  Int_t 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;
+  }
 #endif
-
-  // send dead files to FXS
+  idsFXSfile << Form("%s\n",id.Data());
+
+
+//  // send reference data for this run to FXS - OLD CODE NOT TARED
+//  for (UInt_t eqId=0; eqId<20; eqId++) {
+//    if (eqActiveNoisy[eqId]) {
+//      TString fileName = Form("%s/SPDphys_run_%d_eq_%d.root",saveDirNoisyRef,runNr,eqId);
+//      TString id = Form("SPD_ref_phys_%d",eqId);
+//#ifndef SPD_DA_OFF
+//      Int_t 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;
+//      }
+//      idsFXSfile << Form("%s\n",id.Data());
+//    }
+//  }
+//#endif
+
+
+  // send dead pixels to FXS
+  //  if (nrDeadFilesToTar>0) { //*** old code (used if not all dead data should be uploaded)
   // send a tared file of all the dead files
-  TString send_command = Form("cd %s; tar -cf dead_phys.tar *",saveDirDeadToFXS);
+  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";
 #ifndef SPD_DA_OFF
-  TString fileName = Form("%s/dead_phys.tar",saveDirDeadToFXS);
-  TString id = "SPD_phys_dead";
   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);
     return -1;
   }
 #endif
+  idsFXSfile << Form("%s\n",id.Data());
+  //  } //*** old code (used if not all dead data should be uploaded)
+
 
-  // send noisy files to FXS
+  // send noisy pixels to FXS
   if (handler->GetNrNoisy()>0) { // there must be at least one file created
     // 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());
     system(command.Data());
-#ifndef SPD_DA_OFF
     TString fileName = Form("%s/noisy_phys.tar",saveDirNoisyToFXS);
     TString id = "SPD_phys_noisy";
+#ifndef SPD_DA_OFF
     Int_t 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;
     }
 #endif
+    idsFXSfile << Form("%s\n",id.Data());
   }
 
 
+  // send ids file to FXS
+  idsFXSfile.close();
+  id = "SPD_id_list";
+#ifndef SPD_DA_OFF
+  Int_t status = daqDA_FES_storeFile(idsFXSFileName.Data(),id.Data());
+  if (status!=0) {
+    printf("Failed to export file %s , status %d\n",fileName.Data(),status);
+    return -1;
+  }
+#endif
+
+
 
 
   delete handler;
index 747281e..f911b2c 100644 (file)
@@ -54,13 +54,16 @@ int main(int argc, char **argv) {
   char *saveDirNoisyToFXS    = "./calibResults/ScanNoisyToFXS";     //     may delete content
   char *saveDirDCSconfigToFXS= "./calibResults/ScanDCSconfigToFXS"; //     may delete content
   char *saveDirRef           = "./calibResults/ScanReference";      //     may delete content
+  char *saveDirIdsToFXS      = "./calibResults/IdsToFXS";           //     may delete content
   char *configFilesDir       = "./configFiles";                     //     may delete content
+
   // make sure the directory structure is correct:
   system("mkdir ./calibResults >& /dev/null");
   system("mkdir ./calibResults/ScanNoisy >& /dev/null");
   system("mkdir ./calibResults/ScanNoisyToFXS >& /dev/null");
   system("mkdir ./calibResults/ScanDCSconfigToFXS >& /dev/null");
   system("mkdir ./calibResults/ScanReference >& /dev/null");
+  system("mkdir ./calibResults/IdsToFXS >& /dev/null");
   system("mkdir ./configFiles >& /dev/null");
   // prameters config files
   TString paramsFileName = Form("%s/standal_params.txt",configFilesDir);
@@ -466,6 +469,7 @@ int main(int argc, char **argv) {
     }
   }
 
+  Bool_t reset_made = kFALSE;
 
   // *** *** *** start loop over equipments (eq_id)
   for (int eqId=0; eqId<20; eqId++) {
@@ -498,9 +502,16 @@ int main(int argc, char **argv) {
     }
 
     else if (type==NOISE) {
-      // read previous noisy list
+      // read previous noisy list (clear if overwriting)
       handler->SetFileLocation(saveDirNoisy);
-      handler->ReadFromFiles();
+      if (analyzer->IsOverWriteSet() && !reset_made) {
+       handler->ResetNoisy();
+       handler->WriteToFilesAlways();
+       reset_made=kTRUE;
+      }
+      else {
+       handler->ReadFromFiles();
+      }
       if (analyzer->ProcessNoisyPixels(/*saveDirNoisy*/)) {
        if (permstatus==0) {
          handler->AddNoisyFrom(handlerPermNoisy);
@@ -516,29 +527,26 @@ int main(int argc, char **argv) {
        dcsfile << "ActualDetConfiguration=" << "0,-1,-1\n"; // dummy values for now
        dcsfile << "[NOISY]\n";
        nrDCSconfigFilesProduced++;
-       for (UInt_t iModule=0; iModule<12; iModule++) {
-         UInt_t module = AliITSRawStreamSPD::GetModuleNumber(eqId,iModule);      
-         UInt_t nrNoisy = handler->GetNrNoisy(module);
-         if (analyzer->IsModuleScanned(module) || analyzer->IsOverWriteSet()) {
-           UInt_t headkey=20*10*6;
-           for (UInt_t ind=0; ind<nrNoisy; ind++) {
-             UInt_t nEqId = handler->GetNoisyEqIdAt(module,ind);
-             UInt_t nHs = handler->GetNoisyHSAt(module,ind);
-             UInt_t nChip = handler->GetNoisyChipAt(module,ind);
-             UInt_t newkey = nEqId*10*6 + nHs*10 + nChip;
-             if (newkey!=headkey) { // print eqId,hs,chip_header
-               headkey = newkey;
-               dcsfile << "-" << nEqId << "," << nHs << "," << nChip << "\n";
+
+       for (UInt_t hs=0; hs<6; hs++) {
+         for (UInt_t chip=0; chip<10; chip++) {
+           if (analyzer->IsChipPresent(hs,chip) || analyzer->IsOverWriteSet()) {
+             dcsfile << "-" << eqId << "," << hs << "," << chip << "\n";
+             UInt_t nrNoisy = handler->GetNrNoisyC(eqId,hs,chip);
+             for (UInt_t ind=0; ind<nrNoisy; ind++) {
+               UInt_t col = handler->GetNoisyColAtC(eqId,hs,chip,ind);
+               UInt_t row = handler->GetNoisyRowAtC(eqId,hs,chip,ind);
+               dcsfile << col << "," << row << "\n";
              }
-             dcsfile << handler->GetNoisyColAt(module,ind) << "," << handler->GetNoisyRowAt(module,ind) << "\n";
            }
-           handler->SetFileLocation(saveDirNoisy);
-           handler->WriteNoisyToFile(module);
-           handler->SetFileLocation(saveDirNoisyToFXS);
-           handler->WriteNoisyToFile(module);
-           nrNoisyFilesProduced++;
          }
        }
+       handler->SetFileLocation(saveDirNoisy);
+       handler->WriteNoisyToFile(eqId);
+       handler->SetFileLocation(saveDirNoisyToFXS);
+       handler->WriteNoisyToFile(eqId);
+       nrNoisyFilesProduced++;
+       
        dcsfile.close();
       }
     }
@@ -552,12 +560,9 @@ int main(int argc, char **argv) {
       dcsfile << "RunNumber=" << runNr << "\n";
       dcsfile << "Type=" << type << "\n";
       dcsfile << "Router=" << routerNr << "\n";
-      dcsfile << "ActualDetCoonfiguration=" << "0,-1,-1\n"; // dummy values for now
+      dcsfile << "ActualDetConfiguration=" << "0,-1,-1\n"; // dummy values for now
       dcsfile << "[DACvalues]\n";
       nrDCSconfigFilesProduced++;
-      //      TString ofileName = Form("%s/minth_eq_%d.txt",saveDirParameters,eqId);
-      //      ofstream ofile;
-      //      ofile.open (ofileName.Data());
       for (UInt_t hs=0; hs<6; hs++) {
        for (UInt_t chipNr=0; chipNr<10; chipNr++) {
          Int_t minTh = -1;
@@ -570,12 +575,8 @@ int main(int argc, char **argv) {
              printf("MinTh failed for Eq %d , HS %d , Chip %d\n",eqId,hs,chipNr);
            }
          }
-         //      ofile << minTh;
-         //      ofile << "\t";
        }
-       //      ofile << "\n";
       }
-      //      ofile.close();
       dcsfile.close();
     }
 
@@ -591,9 +592,6 @@ int main(int argc, char **argv) {
       dcsfile << "ActualDetCoonfiguration=" << "0,-1,-1\n"; // dummy values for now
       dcsfile << "[DACvalues]\n";
       nrDCSconfigFilesProduced++;
-//      TString ofileName = Form("%s/delay_eq_%d.txt",saveDirParameters,eqId);
-//      ofstream ofile;
-//      ofile.open (ofileName.Data());
       for (UInt_t hs=0; hs<6; hs++) {
        for (UInt_t chipNr=0; chipNr<10; chipNr++) {
          Int_t clockCycle = -1;
@@ -612,12 +610,8 @@ int main(int argc, char **argv) {
              printf("Delay failed for Eq %d , HS %d , Chip %d\n",eqId,hs,chipNr);
            }
          }
-         //      ofile << delayCtrl << "/" << miscCtrl;
-         //      ofile << "\t";
        }
-       //      ofile << "\n";
       }
-      //      ofile.close();
       dcsfile.close();
     }
 
@@ -632,12 +626,17 @@ int main(int argc, char **argv) {
   }
   // *** *** *** end loop over equipments (eq_id)
 
+
   delete handler;
   if (handlerPermNoisy!=NULL) {
     delete handlerPermNoisy;
   }
 
 
+  TString idsFXSFileName = Form("%s/FXSids_run_%d.txt",saveDirIdsToFXS,runNr);
+  ofstream idsFXSfile;
+  idsFXSfile.open(idsFXSFileName.Data());
+
 
 
   // send noisy data to FXS
@@ -646,15 +645,16 @@ int main(int argc, char **argv) {
     TString command = Form("cd %s; tar -cf noisy_scan.tar *",saveDirNoisyToFXS);
     //    printf("\n\n%s\n\n",command.Data());
     system(command.Data());
-#ifndef SPD_DA_OFF
     TString fileName = Form("%s/noisy_scan.tar",saveDirNoisyToFXS);
     TString id = "SPD_scan_noisy";
+#ifndef SPD_DA_OFF
     Int_t 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;
     }
 #endif
+    idsFXSfile << Form("%s\n",id.Data());
   }
 
   // send dcs config files to FXS
@@ -663,33 +663,36 @@ int main(int argc, char **argv) {
     TString command = Form("cd %s; tar -cf dcsConfig.tar *",saveDirDCSconfigToFXS);
     //    printf("\n\n%s\n\n",command.Data());
     system(command.Data());
-#ifndef SPD_DA_OFF
     TString fileName = Form("%s/dcsConfig.tar",saveDirDCSconfigToFXS);
     TString id = "SPD_dcsConfig";
+#ifndef SPD_DA_OFF
     Int_t 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;
     }
 #endif
+    //idsFXSfile << Form("%s\n",id.Data()); // do NOT write this id (this is not for preprocessor)
   }
 
   // send reference data to FXS
-#ifndef SPD_DA_OFF
   for (UInt_t eqId=0; eqId<20; eqId++) {
     if (bScanInit[eqId]) {
       TString fileName = Form("%s/SPDcal_run_%d_eq_%d.root",saveDirRef,runNr,eqId);
       TString id = Form("SPD_ref_scan_%d",eqId);
+#ifndef SPD_DA_OFF
       Int_t 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;
       }
+#endif
+      idsFXSfile << Form("%s\n",id.Data());
     }
   }
-#endif
 
 
+  idsFXSfile.close();