]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ZDC/AliZDCPreprocessor.cxx
Updates for new ADD + ZDC modules
[u/mrichter/AliRoot.git] / ZDC / AliZDCPreprocessor.cxx
index 51a7842bb46c4828b0146953b659c4148368371d..1eb39163619d22354d68248a64b3ae206bebad92 100644 (file)
@@ -19,6 +19,7 @@
 #include "AliZDCLaserCalib.h"
 #include "AliZDCEnCalib.h"
 #include "AliZDCTowerCalib.h"
+#include "AliZDCMBCalib.h"
 
 /////////////////////////////////////////////////////////////////////
 //                                                                //
@@ -48,6 +49,8 @@
 // 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
 // ******************************************************************
 
 ClassImp(AliZDCPreprocessor)
@@ -86,7 +89,7 @@ void AliZDCPreprocessor::Initialize(Int_t run, UInt_t startTime, UInt_t endTime)
 
   AliPreprocessor::Initialize(run, startTime, endTime);
 
-  AliInfo(Form("\n\tRun %d \n\tStartTime %s \n\tEndTime %s \n\tStartTime DCS Query %s \n\tEndTime DCS Query %s", run,
+  AliDebug(2,Form("\n\tRun %d \n\tStartTime %s \n\tEndTime %s \n\tStartTime DCS Query %s \n\tEndTime DCS Query %s", run,
                TTimeStamp(startTime).AsString(),
                TTimeStamp(endTime).AsString(), ((TTimeStamp)GetStartTimeDCSQuery()).AsString(), ((TTimeStamp)GetEndTimeDCSQuery()).AsString()));
 
@@ -117,22 +120,35 @@ UInt_t AliZDCPreprocessor::ProcessDCSData(TMap* dcsAliasMap)
 {
   
   // Fills data into a AliZDCDataDCS object
-  if(!dcsAliasMap) return 1;
+  if(!dcsAliasMap){
+    Log(" No DCS map found: ZDC exiting from Shuttle");
+    if(fData){
+      delete fData;
+      fData = 0;
+    }
+    return 1;
+  }
+
   Log(Form("Processing data from DCS"));
+   
   // The processing of the DCS input data is forwarded to AliZDCDataDCS
-  Float_t dcsValues[28]; // DCSAliases=28
-  fData->SetCalibData(dcsValues);
-  Bool_t resDCSProcess = fData->ProcessData(*dcsAliasMap);
   //dcsAliasMap->Print(""); 
-  if(resDCSProcess==kFALSE) Log(" Problems in processing DCS DP");
+  Bool_t resDCSProcess = fData->ProcessData(*dcsAliasMap);
+  if(resDCSProcess==kFALSE){
+    Log(" Problems in processing DCS DP");
+    return 1;
+  }  
   
-  // Store DCS data for reference
+  // ------------------------------------------------------
+  // 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");
-  metadata.SetComment("DCS data for ZDC");
+  metadata.SetComment("DCS DP TMap for ZDC");
   Bool_t resDCSRef = kTRUE;
-  resDCSRef = StoreReferenceData("DCS","Data",fData,&metadata);
+  resDCSRef = StoreReferenceData("DCS","Data", dcsAliasMap, &metadata);
   
   if(resDCSRef==kFALSE) return 2;
 
@@ -142,10 +158,10 @@ UInt_t AliZDCPreprocessor::ProcessDCSData(TMap* dcsAliasMap)
   AliAlignObjParams a;
   Double_t dx=0., dz=0., dpsi=0., dtheta=0., dphi=0.;
   // Vertical table position in mm from DCS
-  Double_t dyZN1 = (Double_t) (dcsValues[0]/10.);
-  Double_t dyZP1 = (Double_t) (dcsValues[1]/10.);
-  Double_t dyZN2 = (Double_t) (dcsValues[2]/10.);
-  Double_t dyZP2 = (Double_t) (dcsValues[3]/10.);
+  Double_t dyZN1 = (Double_t) (fData->GetAlignData(0)/10.);
+  Double_t dyZP1 = (Double_t) (fData->GetAlignData(1)/10.);
+  Double_t dyZN2 = (Double_t) (fData->GetAlignData(2)/10.);
+  Double_t dyZP2 = (Double_t) (fData->GetAlignData(3)/10.);
   //
   const char *n1ZDC="ZDC/NeutronZDC_C";  
   const char *p1ZDC="ZDC/ProtonZDC_C";
@@ -165,7 +181,7 @@ UInt_t AliZDCPreprocessor::ProcessDCSData(TMap* dcsAliasMap)
   AliCDBMetaData mdDCS;
   mdDCS.SetResponsible("Chiara Oppedisano");
   mdDCS.SetComment("Alignment object for ZDC");
-  Bool_t resultAl = Store("Align","Data", array, &mdDCS, 0, 0);
+  Bool_t resultAl = Store("Align","Data", array, &mdDCS, 0, kFALSE);
   if(resultAl==kFALSE)  return 3;
   
   return 0;
@@ -174,7 +190,7 @@ UInt_t AliZDCPreprocessor::ProcessDCSData(TMap* dcsAliasMap)
 //______________________________________________________________________________________________
 UInt_t AliZDCPreprocessor::ProcessChMap()
 { 
-  const int kNch = 48;
+  const int kNModules=10, kNch=48, kNScch=32;
   
   // Reading the file for mapping from FXS
   TList* daqSource = GetFileSources(kDAQ, "MAPPING");
@@ -188,10 +204,10 @@ 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]; 
   //
   while((source = dynamic_cast<TObjString*> (iter.Next()))){
-     TString fileName = "ZDCChMapping.dat";
+     TString fileName = GetFile(kDAQ, "MAPPING", source->GetName());
      Log(Form("\t Getting file #%d: ZDCChMapping.dat from %s\n",++isou, source->GetName()));
 
      if(fileName.Length() <= 0){
@@ -208,9 +224,21 @@ UInt_t AliZDCPreprocessor::ProcessChMap()
        }
        Log(Form("File %s connected to process data for ADC mapping", fileName.Data()));
        //
-       for(Int_t j=0; j<kNch; j++){      
+       for(Int_t j=0; j<kNModules; j++){         
+           for(Int_t k=0; k<3; k++){
+             int read = fscanf(file,"%d",&modMap[j][k]);
+            if(read == 0) AliDebug(3," Failing in reading data from mapping file");
+           }
+       }
+       for(Int_t j=kNModules; j<kNModules+kNch; j++){    
+           for(Int_t k=0; k<6; k++){
+             int read = fscanf(file,"%d",&adcMap[j-kNModules][k]);
+            if(read == 0) AliDebug(3," Failing in reading data from mapping file");
+           }
+       }
+       for(Int_t j=kNModules+kNch; j<kNModules+kNch+kNScch; j++){        
            for(Int_t k=0; k<6; k++){
-             int read = fscanf(file,"%d",&readMap[j][k]);
+             int read = fscanf(file,"%d",&scMap[j-kNModules-kNch][k]);
             if(read == 0) AliDebug(3," Failing in reading data from mapping file");
            }
        }
@@ -221,10 +249,10 @@ UInt_t AliZDCPreprocessor::ProcessChMap()
        return 4;
      }
   }
-  delete daqSource; daqSource=0;
   
   // Store the currently read map ONLY IF it is different
   // from the entry in the OCDB
+  Bool_t adcMapUpdated=kFALSE, scMapUpdated=kFALSE;
   Bool_t updateOCDB = kFALSE;
   
   AliCDBEntry *cdbEntry = GetFromOCDB("Calib","ChMap");
@@ -235,15 +263,24 @@ 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;
+      if(  (adcMap[i][1] == chMap->GetADCModule(i)) 
+        && (adcMap[i][2] == chMap->GetADCChannel(i)) 
+       && (adcMap[i][4] == chMap->GetDetector(i)) 
+       && (adcMap[i][5] == chMap->GetSector(i))){
+        adcMapUpdated = kFALSE;
       }
-      else updateOCDB = kTRUE;
+      else adcMapUpdated = kTRUE;
+    }
+    for(Int_t i=0; i<kNScch; i++){
+      if(  (scMap[i][2] == chMap->GetScChannel(i)) 
+       && (scMap[i][4] == chMap->GetScDetector(i)) 
+       && (scMap[i][5] == chMap->GetScSector(i))){
+        scMapUpdated = kFALSE;
+      }
+      else scMapUpdated = kTRUE;
     }
   }
+  if(adcMapUpdated || scMapUpdated) updateOCDB = kTRUE;
   //
   Bool_t resChMapStore = kTRUE;
   if(updateOCDB==kTRUE){
@@ -252,29 +289,40 @@ 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]);
+      mapCalib->SetADCModule(k,adcMap[k][1]);
+      mapCalib->SetADCChannel(k,adcMap[k][2]);
+      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][0]);
+       mapCalib->SetScDetector(k, scMap[k][1]);
+       mapCalib->SetScSector(k, scMap[k][2]);
+    }
+    //
+    mapCalib->Print("");
     // 
     AliCDBMetaData metaData;
     metaData.SetBeamPeriod(0);
     metaData.SetResponsible("Chiara Oppedisano");
     metaData.SetComment("Filling AliZDCChMap object");  
     //
-    resChMapStore = Store("Calib","ChMap",mapCalib, &metaData, 0, 1);
+    resChMapStore = Store("Calib","ChMap",mapCalib, &metaData, 0, kTRUE);
+    printf("  Mapping object stored in OCDB\n");
   }
   else{
     Log(" ZDC/Calib/ChMap entry in OCDB is valid and won't be updated");
     resChMapStore = kTRUE;
   }
   
-  if(resChMapStore==kFALSE) return 5;
+  delete daqSource; daqSource=0;
   
-  return 0;
+  if(resChMapStore==kFALSE) return 5;
+  else return 0;
 
 }
 
@@ -297,7 +345,7 @@ UInt_t AliZDCPreprocessor::ProcessppData()
      for(Int_t j=0; j<6; j++) eCalib->SetEnCalib(j,1.);
      metaData.SetComment("AliZDCEnCalib object");  
      //eCalib->Print("");
-     resEnCal = Store("Calib", "EnergyCalib", eCalib, &metaData, 0, 1);
+     resEnCal = Store("Calib", "EnergyCalib", eCalib, &metaData, 0, kTRUE);
    }
    else{ 
      // if entry exists it is still valid (=1 for all runs!)
@@ -326,7 +374,7 @@ UInt_t AliZDCPreprocessor::ProcessppData()
      metaData.SetResponsible("Chiara Oppedisano");
      metaData.SetComment("AliZDCTowerCalib object");  
      //
-     resTowCal = Store("Calib", "TowerCalib", towCalib, &metaData, 0, 1);
+     resTowCal = Store("Calib", "TowerCalib", towCalib, &metaData, 0, kTRUE);
    }
    else{ 
      // if entry exists it is still valid (=1 for all runs!)
@@ -396,7 +444,7 @@ UInt_t AliZDCPreprocessor::ProcessCalibData()
     metaData.SetResponsible("Chiara Oppedisano");
     metaData.SetComment("Filling AliZDCEnCalib object");  
     //
-    resEnCal = Store("Calib","EnergyCalib",eCalib, &metaData, 0, 1);
+    resEnCal = Store("Calib","EnergyCalib",eCalib, &metaData, 0, kTRUE);
     if(resEnCal==kFALSE) return 6;
   }
   delete daqSources; daqSources = 0;
@@ -454,7 +502,7 @@ UInt_t AliZDCPreprocessor::ProcessCalibData()
     metaData.SetResponsible("Chiara Oppedisano");
     metaData.SetComment("Filling AliZDCTowerCalib object");  
     //
-    resTowCal = Store("Calib","TowerCalib",towCalib, &metaData, 0, 1);
+    resTowCal = Store("Calib","TowerCalib",towCalib, &metaData, 0, kTRUE);
     if(resTowCal==kFALSE) return 7;
   }
   delete daqSourcesH; daqSourcesH = 0;
@@ -526,7 +574,7 @@ UInt_t AliZDCPreprocessor::ProcessPedestalData()
      metaData.SetResponsible("Chiara Oppedisano");
      metaData.SetComment("Filling AliZDCPedestals object");  
      //
-     resPedCal = Store("Calib","Pedestals",pedCalib, &metaData, 0, 1);
+     resPedCal = Store("Calib","Pedestals",pedCalib, &metaData, 0, kTRUE);
      if(resPedCal==kFALSE) return 11;
   }
   delete daqSources; daqSources = 0;
@@ -618,7 +666,7 @@ UInt_t AliZDCPreprocessor::ProcessLaserData()
      metaData.SetResponsible("Chiara Oppedisano");
      metaData.SetComment("Filling AliZDCLaserCalib object");  
      //
-     resLaserCal = Store("Calib","LaserCalib",lCalib, &metaData, 0, 1);
+     resLaserCal = Store("Calib","LaserCalib",lCalib, &metaData, 0, kTRUE);
      if(resLaserCal==kFALSE) return 15;
   }
   delete daqSources; daqSources = 0;
@@ -649,12 +697,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);
@@ -666,21 +779,21 @@ UInt_t AliZDCPreprocessor::Process(TMap* dcsAliasMap)
  printf("\t **** AliZDCPreprocessor -> beamType %s, runType %s ****\n",beamType,runType.Data());
 
  // ******************************************
- //   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)) 
+ if((strcmp(beamType,"A-A")==0) && (runType.CompareTo("CALIBRATION_EMD")==0)) 
    resEnergyCalib =  ProcessCalibData();
  
  // *****************************************************
@@ -691,7 +804,12 @@ 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;
@@ -699,6 +817,7 @@ UInt_t AliZDCPreprocessor::Process(TMap* dcsAliasMap)
  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;