]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ZDC/AliZDCPreprocessor.cxx
Coverity fixes
[u/mrichter/AliRoot.git] / ZDC / AliZDCPreprocessor.cxx
index 987af9f60639958056826fef77f1d4e64bb192e7..1126ff24e20c8568ce6e8a391cae60238a6e910c 100644 (file)
@@ -19,6 +19,8 @@
 #include "AliZDCLaserCalib.h"
 #include "AliZDCEnCalib.h"
 #include "AliZDCTowerCalib.h"
+#include "AliZDCMBCalib.h"
+#include "AliZDCTDCCalib.h"
 
 /////////////////////////////////////////////////////////////////////
 //                                                                //
 // return 15: error storing laser calibration obj. in OCDB
 // return 16: error in ZDCLaserHisto.root file retrieved from DAQ FXS 
 // return 17: error storing laser histos in RefData 
+// return 18: error in ZDCMBCalib.root file retrieved from DAQ FXS 
+// return 19: error storing MB calibration obj. in OCDB
+// return 20: error in ZDCTDCCalib.root file retrieved from DAQ FXS
+// return 21: error in storing TDC calibration obj. in OCDB
+// return 22: error in ZDCTDCHisto.root file retrieved from DAQ FXS
+// Return 23: error storing TDC reference histos in RefData
 // ******************************************************************
 
 ClassImp(AliZDCPreprocessor)
@@ -136,6 +144,10 @@ UInt_t AliZDCPreprocessor::ProcessDCSData(TMap* dcsAliasMap)
     return 1;
   }  
   
+  // ------------------------------------------------------
+  // Change introduced 26/9/09 in order NOT to process the
+  // HV DP since some of them are never found in amanda DB
+  // ------------------------------------------------------
   // Store DCS data as reference
   AliCDBMetaData metadata;
   metadata.SetResponsible("Chiara Oppedisano");
@@ -183,7 +195,7 @@ UInt_t AliZDCPreprocessor::ProcessDCSData(TMap* dcsAliasMap)
 //______________________________________________________________________________________________
 UInt_t AliZDCPreprocessor::ProcessChMap()
 { 
-  const int kNch = 48; const int kNScch = 32;
+  const int kNModules=10, kNch=48, kNScch=32, kNtdcch=32;
   
   // Reading the file for mapping from FXS
   TList* daqSource = GetFileSources(kDAQ, "MAPPING");
@@ -197,7 +209,7 @@ UInt_t AliZDCPreprocessor::ProcessChMap()
   TIter iter(daqSource);
   TObjString* source = 0;
   Int_t isou = 0;
-  Int_t readMap[kNch][6]; 
+  Int_t modMap[kNModules][3], adcMap[kNch][6], scMap[kNScch][6], tdcMap[kNtdcch][4]; 
   //
   while((source = dynamic_cast<TObjString*> (iter.Next()))){
      TString fileName = GetFile(kDAQ, "MAPPING", source->GetName());
@@ -219,7 +231,25 @@ UInt_t AliZDCPreprocessor::ProcessChMap()
        //
        for(Int_t j=0; j<kNch; j++){      
            for(Int_t k=0; k<6; k++){
-             int read = fscanf(file,"%d",&readMap[j][k]);
+             int read = fscanf(file,"%d",&adcMap[j][k]);
+            if(read == 0) AliDebug(3," Failing in reading data from mapping file");
+           }
+       }
+       for(Int_t j=kNch; j<kNch+kNScch; j++){    
+           for(Int_t k=0; k<6; k++){
+             int read = fscanf(file,"%d",&scMap[j-kNch][k]);
+            if(read == 0) AliDebug(3," Failing in reading data from mapping file");
+           }
+       }
+       for(Int_t j=kNch+kNScch; j<kNch+kNScch+kNtdcch; j++){     
+           for(Int_t k=0; k<4; k++){
+             int read = fscanf(file,"%d",&tdcMap[j-kNch-kNScch][k]);
+            if(read == 0) AliDebug(3," Failing in reading data from mapping file");
+           }
+       }
+       for(Int_t j=kNch+kNScch+kNtdcch; j<kNch+kNScch+kNtdcch+kNModules; j++){   
+           for(Int_t k=0; k<3; k++){
+             int read = fscanf(file,"%d",&modMap[j-kNch-kNScch-kNtdcch][k]);
             if(read == 0) AliDebug(3," Failing in reading data from mapping file");
            }
        }
@@ -233,6 +263,7 @@ UInt_t AliZDCPreprocessor::ProcessChMap()
   
   // Store the currently read map ONLY IF it is different
   // from the entry in the OCDB
+  Bool_t adcMapUpdated=kFALSE, scMapUpdated=kFALSE, tdcMapUpdated=kFALSE;
   Bool_t updateOCDB = kFALSE;
   
   AliCDBEntry *cdbEntry = GetFromOCDB("Calib","ChMap");
@@ -243,19 +274,26 @@ UInt_t AliZDCPreprocessor::ProcessChMap()
   else{
     AliZDCChMap *chMap = (AliZDCChMap*) cdbEntry->GetObject();
     for(Int_t i=0; i<kNch; i++){
-      if(  (readMap[i][1] == chMap->GetADCModule(i)) 
-        && (readMap[i][2] == chMap->GetADCChannel(i)) 
-       && (readMap[i][4] == chMap->GetDetector(i)) 
-       && (readMap[i][5] == chMap->GetSector(i))){
-        updateOCDB = kFALSE;
-      }
-      else{
-        updateOCDB = kTRUE;
-        break;
-      }
+      if(  (adcMap[i][1] != chMap->GetADCModule(i)) 
+        || (adcMap[i][2] != chMap->GetADCChannel(i)) 
+       || (adcMap[i][3] != chMap->GetADCSignalCode(i)) 
+       || (adcMap[i][4] != chMap->GetDetector(i)) 
+       || (adcMap[i][5] != chMap->GetSector(i))) 
+        adcMapUpdated = kTRUE;
+    }
+    for(Int_t i=0; i<kNScch; i++){
+      if(  (scMap[i][2] != chMap->GetScChannel(i)) 
+       || (scMap[i][3] != chMap->GetScSignalCode(i)) )
+        scMapUpdated = kTRUE;
+    }
+    for(Int_t i=0; i<kNtdcch; i++){
+      if(  (tdcMap[i][2] != chMap->GetTDCChannel(i)) 
+       || (tdcMap[i][3] != chMap->GetTDCSignalCode(i)))
+        tdcMapUpdated = kTRUE;
     }
   }
-
+  if(adcMapUpdated || scMapUpdated || tdcMapUpdated) updateOCDB = kTRUE;
+  //
   Bool_t resChMapStore = kTRUE;
   if(updateOCDB==kTRUE){
     Log(" A new entry ZDC/Calib/ChMap will be created");
@@ -263,24 +301,33 @@ UInt_t AliZDCPreprocessor::ProcessChMap()
     // --- Initializing mapping calibration object
     AliZDCChMap *mapCalib = new AliZDCChMap("ZDC");
     // Writing channel map in the OCDB
+    for(Int_t k=0; k<kNModules; k++){
+      mapCalib->SetModuleMap(k, modMap[k][0], modMap[k][1], modMap[k][2]);
+    }
     for(Int_t k=0; k<kNch; k++){
-      mapCalib->SetADCModule(k,readMap[k][1]);
-      mapCalib->SetADCChannel(k,readMap[k][2]);
-      mapCalib->SetDetector(k,readMap[k][4]);
-      mapCalib->SetSector(k,readMap[k][5]);
-      // TEMPORARY!!!! Until no mapping from scaler is provided!!!!!!!
-      if(k<kNScch){
-         mapCalib->SetScChannel(k, 0);
-        mapCalib->SetScDetector(k, 0);
-        mapCalib->SetScSector(k, 0);
-      }
+      mapCalib->SetADCModule(k,adcMap[k][1]);
+      mapCalib->SetADCChannel(k,adcMap[k][2]);
+      mapCalib->SetADCSignalCode(k,adcMap[k][3]);
+      mapCalib->SetDetector(k,adcMap[k][4]);
+      mapCalib->SetSector(k,adcMap[k][5]);
     }
-    mapCalib->Print("");
+    for(Int_t k=0; k<kNScch; k++){
+       mapCalib->SetScChannel(k, scMap[k][2]);
+       mapCalib->SetScSignalCode(k, scMap[k][3]);
+       mapCalib->SetScDetector(k, scMap[k][4]);
+       mapCalib->SetScSector(k, scMap[k][5]);
+    }
+    for(Int_t k=0; k<kNtdcch; k++){
+       mapCalib->SetTDCChannel(k, tdcMap[k][2]);
+       mapCalib->SetTDCSignalCode(k, tdcMap[k][3]);
+    }
+    //
+    //mapCalib->Print("");
     // 
     AliCDBMetaData metaData;
     metaData.SetBeamPeriod(0);
-    //metaData.SetResponsible("Chiara Oppedisano");
-    metaData.SetComment("Filling AliZDCChMap object"); 
+    metaData.SetResponsible("Chiara Oppedisano");
+    metaData.SetComment("AliZDCChMap object created by ZDC preprocessor");  
     //
     resChMapStore = Store("Calib","ChMap",mapCalib, &metaData, 0, kTRUE);
     printf("  Mapping object stored in OCDB\n");
@@ -289,11 +336,102 @@ UInt_t AliZDCPreprocessor::ProcessChMap()
     Log(" ZDC/Calib/ChMap entry in OCDB is valid and won't be updated");
     resChMapStore = kTRUE;
   }
-
   delete daqSource; daqSource=0;
   
-  if(resChMapStore==kFALSE) return 5;
-  else return 0;
+  TString runType = GetRunType();
+  if(runType.CompareTo("PHYSICS")==0){
+    Log(Form("RunType %s -> producing TDC calibration data",runType.Data()));
+    
+    // Reading the file for mapping from FXS
+    TList* daqSourcetdc = GetFileSources(kDAQ, "TDCDATA");
+    if(!daqSourcetdc){
+      AliError(Form("No sources for file ZDCChMappingTDCCalib.dat in run %d ", fRun));
+      return 20;
+    }
+    if(daqSourcetdc->GetEntries()==0) return 20;
+    Log("\t List of DAQ sources for TDCDATA id: "); daqSourcetdc->Print();
+    //
+    Bool_t resTDCcal = kTRUE;
+    TIter itertdc(daqSourcetdc);
+    TObjString* sourcetdc = 0;
+    Int_t isoutdc = 0;
+    //
+    while((sourcetdc = dynamic_cast<TObjString*> (itertdc.Next()))){
+     TString fileNametdc = GetFile(kDAQ, "TDCDATA", sourcetdc->GetName());
+     Log(Form("\t Getting file #%d: ZDCTDCdata.dat from %s\n",++isoutdc, sourcetdc->GetName()));
+
+     if(fileNametdc.Length() <= 0){
+       Log(Form("No file from source %s!", sourcetdc->GetName()));
+       return 20;
+     }
+     // --- Initializing TDC calibration object
+     AliZDCTDCCalib *tdcCalib = new AliZDCTDCCalib("ZDC");
+     // --- Reading file with calibration data
+     //const char* fname = fileName.Data();
+     if(fileNametdc){
+       FILE *filetdc;
+       if((filetdc = fopen(fileNametdc,"r")) == NULL){
+        printf("Cannot open file %s \n",fileNametdc.Data());
+         return 20;
+       }
+       Log(Form("File %s connected to process TDC data", fileNametdc.Data()));
+       //
+       Float_t tdcMean[6][2];
+       for(Int_t it=0; it<6; it++){
+         for(Int_t iu=0; iu<2; iu++) tdcMean[it][iu]=0.;
+       }
+       for(Int_t k=0; k<6; k++){
+        for(Int_t j=0; j<2; j++){
+           int leggi = fscanf(filetdc,"%f",&tdcMean[k][j]);
+          if(leggi==0) AliDebug(3," Failing reading data from tdc file");
+          tdcCalib->SetMeanTDC(k, tdcMean[k][0]);
+          tdcCalib->SetWidthTDC(k, tdcMean[k][1]);
+       }
+       }
+       fclose(filetdc);
+     }
+     else{
+       Log(Form("File %s not found", fileNametdc.Data()));
+       return 20;
+     }
+     //
+     AliCDBMetaData metaData;
+     metaData.SetBeamPeriod(0);
+     metaData.SetResponsible("Chiara Oppedisano");
+     metaData.SetComment("Filling AliZDCTDCCalib object");  
+     //
+     resTDCcal = Store("Calib","TDCCalib",tdcCalib, &metaData, 0, kTRUE);
+     if(resTDCcal==kFALSE) return 21;
+    }
+    delete daqSourcetdc; daqSourcetdc = 0;
+
+    Bool_t restdcHist = kTRUE;
+    TList* daqSourceH = GetFileSources(kDAQ, "TDCHISTOS");
+    if(!daqSourceH){
+      Log(Form("No source for TDCHISTOS id run %d !", fRun));
+      return 22;
+    }
+    Log("\t List of DAQ sources for TDCHISTOS id: "); daqSourceH->Print();
+    //
+    TIter iterH(daqSourceH);
+    TObjString* sourceH = 0;
+    Int_t iH=0;
+    while((sourceH = dynamic_cast<TObjString*> (iterH.Next()))){
+     TString stringTDCFileName = GetFile(kDAQ, "TDCHISTOS", sourceH->GetName());
+     if(stringTDCFileName.Length() <= 0){
+       Log(Form("No TDCHISTOS file from source %s!", sourceH->GetName()));
+        return 22;
+     }
+     const char* tdcFileName = stringTDCFileName.Data();
+     Log(Form("\t Getting file #%d: %s from %s\n",++iH, tdcFileName, sourceH->GetName()));
+     restdcHist = StoreReferenceFile(tdcFileName, "tdcReference.root");
+     if(restdcHist==kFALSE) return 23;
+    }
+    delete daqSourceH; daqSourceH=0;
+  }
+  
+    if(resChMapStore==kFALSE) return 5;
+    else return 0;
 
 }
 
@@ -359,7 +497,7 @@ UInt_t AliZDCPreprocessor::ProcessppData()
 }
 
 //______________________________________________________________________________________________
-UInt_t AliZDCPreprocessor::ProcessCalibData()
+UInt_t AliZDCPreprocessor::ProcessCalibData(Float_t beamEnergy)
 {
   TList* daqSources = GetFileSources(kDAQ, "EMDENERGYCALIB");
   if(!daqSources){
@@ -397,8 +535,9 @@ UInt_t AliZDCPreprocessor::ProcessCalibData()
       for(Int_t j=0; j<6; j++){        
         if(j<6){
           int iread = fscanf(file,"%f",&fitValEMD[j]);
-          if(iread==0) AliDebug(3," Failing reading daa from EMD calibration data file");
-          eCalib->SetEnCalib(j,fitValEMD[j]);
+          if(iread==0) AliDebug(3," Failing reading data from EMD calibration data file");
+          if(fitValEMD[j]!=1.) eCalib->SetEnCalib(j, beamEnergy/fitValEMD[j]);
+         else eCalib->SetEnCalib(j, fitValEMD[j]);
         }
       }
       //
@@ -518,8 +657,8 @@ UInt_t AliZDCPreprocessor::ProcessPedestalData()
        return 10;
      }
      Log(Form("File %s connected to process pedestal data", pedFileName));
-     Float_t pedVal[(2*knZDCch)][2];
-     for(Int_t k=0; k<(2*knZDCch); k++){
+     Float_t pedVal[(3*knZDCch)][2];
+     for(Int_t k=0; k<(3*knZDCch); k++){
         for(Int_t j=0; j<2; j++){
            int aleggi = fscanf(file,"%f",&pedVal[k][j]);
            if(aleggi==0) AliDebug(3," Failing reading data from pedestal file");
@@ -668,12 +807,77 @@ UInt_t AliZDCPreprocessor::ProcessLaserData()
   return 0;
 }
 
+
+//______________________________________________________________________________________________
+UInt_t AliZDCPreprocessor::ProcessMBCalibData()
+{
+  TList* daqSources = GetFileSources(kDAQ, "MBCALIB");
+  if(!daqSources){
+    AliError(Form("No sources for CALIBRATION_MB run %d !", fRun));
+    return 18;
+  }
+  if(daqSources->GetEntries()==0) return 18;
+  Log("\t List of DAQ sources for MBCALIB id: "); daqSources->Print();
+  //
+  TIter iter2(daqSources);
+  TObjString* source = 0;
+  Int_t i=0;
+  Bool_t resMBCal=kTRUE;
+  
+  while((source = dynamic_cast<TObjString*> (iter2.Next()))){
+     TString stringMBFileName = GetFile(kDAQ, "MBCALIB", source->GetName());
+     if(stringMBFileName.Length() <= 0){
+       Log(Form("No MBCALIB file from source %s!", source->GetName()));
+       return 18;
+     }
+     const char* mbFileName = stringMBFileName.Data();
+     Log(Form("\t Getting file #%d: %s from %s\n",++i,mbFileName,source->GetName()));
+     //
+     // --- Initializing calibration object
+     AliZDCMBCalib *mbCalib = new AliZDCMBCalib("ZDC");
+     // --- Reading file with calibration data
+     if(mbFileName){
+       TFile * fileHistos = TFile::Open(mbFileName);
+       Log(Form("File %s connected to process data from CALIBRATION_MB events", mbFileName));
+       //
+       fileHistos->cd();
+       TH2F *hZDCvsZEM = (TH2F*)  fileHistos->Get("hZDCvsZEM");
+       TH2F *hZDCCvsZEM = (TH2F*) fileHistos->Get("hZDCCvsZEM");
+       TH2F *hZDCAvsZEM = (TH2F*) fileHistos->Get("hZDCAvsZEM");
+       //
+       mbCalib->SetZDCvsZEM(hZDCvsZEM);
+       mbCalib->SetZDCCvsZEM(hZDCCvsZEM);
+       mbCalib->SetZDCAvsZEM(hZDCAvsZEM);
+       //
+       //fileHistos->Close();
+     }
+     else{
+       Log(Form("File %s not found", mbFileName));
+       return 14;
+     }
+     // 
+     AliCDBMetaData metaData;
+     metaData.SetBeamPeriod(0);
+     metaData.SetResponsible("Chiara Oppedisano");
+     metaData.SetComment("Filling AliZDCMBCalib object");  
+     //
+     //mbCalib->Dump();
+     //
+     resMBCal = Store("Calib","MBCalib",mbCalib, &metaData, 0, kTRUE);
+       printf(" here 1000\n");
+     if(resMBCal==kFALSE) return 19;
+  }
+  delete daqSources; daqSources = 0;
+  
+  return 0;
+}
+
 //______________________________________________________________________________________________
 UInt_t AliZDCPreprocessor::Process(TMap* dcsAliasMap)
 {
  UInt_t resDCS = 0;
  UInt_t resChMap=0;
- UInt_t resEnergyCalib=0, resPedestalCalib=0, resLaserCalib=0;
+ UInt_t resEnergyCalib=0, resPedestalCalib=0, resLaserCalib=0, resMBCalib=0;
 
  // ************************* Process DCS data ****************************
  if(ProcessDCS()) resDCS = ProcessDCSData(dcsAliasMap);
@@ -682,25 +886,27 @@ UInt_t AliZDCPreprocessor::Process(TMap* dcsAliasMap)
 
  const char* beamType = GetRunParameter("beamType");
  TString runType = GetRunType();
- printf("\t **** AliZDCPreprocessor -> beamType %s, runType %s ****\n",beamType,runType.Data());
+ Float_t beamEnergy = (Float_t)(((TString)GetRunParameter("beamEnergy")).Atof()); 
+ printf("\t **** AliZDCPreprocessor -> runType %s, beamType %s,  beamEnergy %1.0f ****\n",
+       runType.Data(),beamType,beamEnergy);
 
  // ******************************************
- //   ADC channel mapping
+ // ADC channel mapping
  // ******************************************
  resChMap = ProcessChMap();
  
  // ******************************************
- //   Calibration param. for p-p data (all = 1)
+ // Calibration param. for p-p data (all = 1)
  // ******************************************
  // NO ENERGY CALIBRATION -> coefficients set to 1.
  // Temp -> also inter-calibration coefficients are set to 1.
  if((strcmp(beamType,"p-p")==0) || (strcmp(beamType,"P-P")==0)) resEnergyCalib = ProcessppData();
  
  // *****************************************************
- //  EMD EVENTS -> Energy calibration and equalization
+ // CALIBRATION_EMD -> Energy calibration and equalization
  // *****************************************************
else if((strcmp(beamType,"A-A")==0) && (runType.CompareTo("CALIBRATION_EMD")==0)) 
-   resEnergyCalib =  ProcessCalibData();
+ if((strcmp(beamType,"A-A")==0) && (runType.CompareTo("CALIBRATION_EMD")==0)) 
+   resEnergyCalib =  ProcessCalibData(beamEnergy);
  
  // *****************************************************
  // STANDALONE_PEDESTALS -> Pedestal subtraction 
@@ -710,14 +916,19 @@ UInt_t AliZDCPreprocessor::Process(TMap* dcsAliasMap)
  // *****************************************************
  // STANDALONE_LASER -> Signal stability and ageing 
  // *****************************************************
- if(runType.CompareTo("STANDALONE_LASER")==0) resLaserCalib = ProcessLaserData();
+ else if(runType.CompareTo("STANDALONE_LASER")==0) resLaserCalib = ProcessLaserData();
 
+ // *****************************************************
+ // CALIBRATION_MB -> Signal stability and ageing 
+ // *****************************************************
+ else if(runType.CompareTo("CALIBRATION_MB")==0) resMBCalib = ProcessMBCalibData();
  if(resDCS!=0)               return resDCS;
  else if(resChMap!=0)        return resChMap;
  else if(resEnergyCalib!=0)   return resEnergyCalib;
  else if(resPedestalCalib!=0) return resPedestalCalib;
  else if(resLaserCalib!=0)    return resLaserCalib;
+ else if(resMBCalib!=0)       return resMBCalib;
  
  return 0;