#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);
}
//______________________________________________________________________________________________
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 *** //
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()));
// 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;
+// }
+// }
+// }
+// }
+// }
+// ***
+
// ******************************************************************************************** //
// 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++;
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++;
// 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);
}
+ // 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;
+}