correct mask for V0 charge decoding in STU payload
[u/mrichter/AliRoot.git] / EMCAL / EMCALLEDda.cxx
index 1f7c1bf..b147bca 100644 (file)
@@ -8,8 +8,7 @@
   Input Files: argument list
   Output Files: RESULT_FILE=EMCALLED.root, to be exported to the DAQ FXS
   fileId:  FILE_ID=EMCALLED    
-  Trigger types used: CALIBRATION_EVENT (temporarily also PHYSICS_EVENT to start with)
-  [When we have real data files later, we should only use CALIBRATION_EVENT]
+  Trigger types used: CALIBRATION_EVENT 
 */
 /*
   This process reads RAW data from the files provided as command line arguments
 */
 
 #define RESULT_FILE  "EMCALLED.root"
-#define FILE_ID "EMCALLED"
+#define FILE_ID "signal"
 #define AliDebugLevel() -1
-#define FILE_PEDClassName "emcCalibPedestal"
 #define FILE_SIGClassName "emcCalibSignal"
-const int kNRCU = 2;
+const int kNRCU = 4;
 /* LOCAL_DEBUG is used to bypass daq* calls that do not work locally */
 //#define LOCAL_DEBUG 1 // comment out to run normally                                                            
 extern "C" {
@@ -46,14 +44,14 @@ extern "C" {
 #include "AliRawReader.h"
 #include "AliRawReaderDate.h"
 #include "AliRawEventHeaderBase.h"
-#include "AliCaloRawStream.h"
+#include "AliCaloRawStreamV3.h"
 #include "AliCaloAltroMapping.h"
 #include "AliLog.h"
+#include "AliDAQ.h"
 
 //
 // EMC calibration-helper algorithm includes
 //
-#include "AliCaloCalibPedestal.h"
 #include "AliCaloCalibSignal.h"
 
 /*
@@ -63,7 +61,7 @@ extern "C" {
 
 int main(int argc, char **argv) {
 
-  AliLog::SetClassDebugLevel("AliCaloRawStream",-5);
+  AliLog::SetClassDebugLevel("AliCaloRawStreamV3",-5);
   AliLog::SetClassDebugLevel("AliRawReaderDate",-5);
   AliLog::SetModuleDebugLevel("RAW",-5);
 
@@ -78,11 +76,13 @@ int main(int argc, char **argv) {
                                        "TStreamerInfo",
                                        "RIO",
                                        "TStreamerInfo()"); 
-
+  
   int i, status;
-
+  
   /* log start of process */
   printf("EMCAL DA started - %s\n",__FILE__);
+  
+  Int_t emcID = AliDAQ::DetectorID("EMCAL"); // bit 18..
 
   /* declare monitoring program */
   status=monitorDeclareMp( __FILE__ );
@@ -93,10 +93,10 @@ int main(int argc, char **argv) {
   /* define wait event timeout - 1s max */
   monitorSetNowait();
   monitorSetNoWaitNetworkTimeout(1000);
-
+  
   /* Retrieve mapping files from DAQ DB */ 
-  const char* mapFiles[kNRCU] = {"RCU0.data","RCU1.data"};
-
+  const char* mapFiles[kNRCU] = {"RCU0A.data","RCU1A.data","RCU0C.data","RCU1C.data"};
+  
   for(Int_t iFile=0; iFile<kNRCU; iFile++) {
     int failed = daqDA_DB_getFile(mapFiles[iFile], mapFiles[iFile]);
     if(failed) { 
@@ -114,26 +114,41 @@ int main(int argc, char **argv) {
   TString path = "./";
   path += "RCU";
   TString path2;
-  for(Int_t i = 0; i < kNRCU; i++) {
-    path2 = path;
-    path2 += i;
-    path2 += ".data";
-    mapping[i] = new AliCaloAltroMapping(path2.Data());
+  TString side[] = {"A","C"};//+ and - pseudorapidity supermodules
+  for(Int_t j = 0; j < 2; j++){
+    for(Int_t i = 0; i < 2; i++) {
+      path2 = path;
+      path2 += i;
+      path2 += side[j]; 
+      path2 += ".data";
+      mapping[j*2 + i] = new AliCaloAltroMapping(path2.Data());
+    }
+  }
+  
+  /* Retrieve cut=parameter file from DAQ DB */ 
+  const char* parameterFile = {"EMCALLEDda.dat"};
+  
+  int failed = daqDA_DB_getFile(parameterFile, parameterFile);
+  if (failed) { 
+    printf("Cannot retrieve file : %s from DAQ DB. Exit now..\n",
+          parameterFile);
+#ifdef LOCAL_DEBUG
+#else
+    return -1;
+#endif
   }
   
   /* set up our analysis classes */  
-  AliCaloCalibPedestal * calibPedestal = new AliCaloCalibPedestal(AliCaloCalibPedestal::kEmCal); 
-  calibPedestal->SetAltroMapping( mapping );
   AliCaloCalibSignal * calibSignal = new AliCaloCalibSignal(AliCaloCalibSignal::kEmCal); 
   calibSignal->SetAltroMapping( mapping );
-
+  calibSignal->SetParametersFromFile( parameterFile );
+  
   AliRawReader *rawReader = NULL;
-  AliRawReader *rawReader2 = NULL;
   int nevents=0;
-
+  
   /* loop over RAW data files */
   for ( i=1; i<argc; i++ ) {
-
+    
     /* define data source : this is argument i */
     printf("Processing file %s\n", argv[i]);
     status=monitorSetDataSource( argv[i] );
@@ -141,16 +156,16 @@ int main(int argc, char **argv) {
       printf("monitorSetDataSource() failed. Error=%s. Exiting ...\n", monitorDecodeError(status));
       return -1;
     }
-
+    
     /* read until EOF */
     struct eventHeaderStruct *event;
     eventTypeType eventT;
 
     for ( ; ; ) { // infinite loop
-
+      
       /* check shutdown condition */
       if (daqDA_checkShutdown()) {break;}
-
+      
       /* get next event (blocking call until timeout) */
       status=monitorGetEventDynamic((void **)&event);
       if (status==MON_ERR_EOF) {
@@ -161,70 +176,82 @@ int main(int argc, char **argv) {
        printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
        break;
       }
-
+      
       /* retry if got no event */
       if (event==NULL) {
        continue;
       }
       eventT = event->eventType; /* just convenient shorthand */
-
-      /* skip start/end of run events */
-      if ( (eventT != physicsEvent) && (eventT != calibrationEvent) ) {
+      /* only look at calibration events */
+      if ( eventT != calibrationEvent ) {
+       free(event);    
+       continue;
+      }
+      
+      /* only look at events where EMCAL was included */
+      if (! TEST_DETECTOR_IN_PATTERN(event->eventDetectorPattern, emcID) ) {
+       free(event);    
        continue;
       }
 
       nevents++; // count how many acceptable events we have
-
+      
       //  Signal calibration
       rawReader = new AliRawReaderDate((void*)event);
+      calibSignal->SetRunNumber(event->eventRunNb);
       calibSignal->ProcessEvent(rawReader);
       delete rawReader;
-      // seems like we need a fresh rawreader for a 2nd read customer(?)
-      // otherwise, we have already fast-forwarded past the event(?)
-      rawReader2 = new AliRawReaderDate((void*)event);
-      calibPedestal->ProcessEvent(rawReader2);
-      delete rawReader2;
-
+      
       /* free resources */
       free(event);    
-
+      
     } //until EOF
   } // loop over files
-
+  
+  // calculate average values also, for the LED info
+  calibSignal->SetUseAverage(kTRUE);
+  calibSignal->Analyze();
+  
+  // by default, we only save the full info in debug mode  
+#ifdef LOCAL_DEBUG
+#else
+  // reset the full trees, when we are not in debug mode
+  calibSignal->GetTreeAmpVsTime()->Reset();
+  calibSignal->GetTreeLEDAmpVsTime()->Reset();
+#endif
+  
   //
   // write class to rootfile
   //
-
-  printf ("%d physics/calibration events processed.\n",nevents);
-
+  
+  printf ("%d calibration events processed.\n",nevents);
+  
   TFile f(RESULT_FILE, "recreate");
   if (!f.IsZombie()) { 
     f.cd();
-    calibPedestal->Write(FILE_PEDClassName);
     calibSignal->Write(FILE_SIGClassName);
     f.Close();
-    printf("Objects saved to file \"%s\" as \"%s\" and \"%s\".\n", 
-          RESULT_FILE, FILE_PEDClassName, FILE_SIGClassName); 
+    printf("Objects saved to file \"%s\" as \"%s\".\n", 
+          RESULT_FILE, FILE_SIGClassName); 
   } 
   else {
     printf("Could not save the object to file \"%s\".\n", 
           RESULT_FILE);
   }
-
+  
   //
   // closing down; see if we can delete our analysis helper(s) also
   //
-  delete calibPedestal;
   delete calibSignal;
   for(Int_t iFile=0; iFile<kNRCU; iFile++) {
     if (mapping[iFile]) delete mapping[iFile];
   }
-
+  
   /* store the result file on FES */
 #ifdef LOCAL_DEBUG
 #else
   status = daqDA_FES_storeFile(RESULT_FILE, FILE_ID);
 #endif
-
+  
   return status;
 }