]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ZDC/ZDCMAPPINGda.cxx
end-of-line normalization
[u/mrichter/AliRoot.git] / ZDC / ZDCMAPPINGda.cxx
index 4625e05a9d906c1d90d8a60920da35f7d9c5656f..22488938f82b1f0bfaa51dbace18cfc49378d41d 100644 (file)
-/*\r
-\r
-This program reads the DAQ data files passed as argument using the monitoring library.\r
-\r
-The program reports about its processing progress.\r
-\r
-Messages on stdout are exported to DAQ log system.\r
-\r
-DA to write mapping for ADC modules and VME scaler\r
-\r
-Contact: Chiara.Oppedisano@to.infn.it\r
-Link: \r
-Run Type: PHYSICS\r
-DA Type: MON\r
-Number of events needed: at least 50% \r
-Input Files:  none\r
-Output Files: ZDCChMapping.dat\r
-Trigger Types Used: different trigger types are used\r
-\r
-*/\r
-\r
-#define MAPDATA_FILE  "ZDCChMapping.dat"\r
-#define TDCDATA_FILE  "ZDCTDCCalib.dat"\r
-#define TDCHISTO_FILE "ZDCTDCHisto.root"\r
-\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-#include <Riostream.h>\r
-#include <signal.h>\r
-\r
-// DATE\r
-#include <event.h>\r
-#include <monitor.h>\r
-#include <daqDA.h>\r
-\r
-//ROOT\r
-#include <TROOT.h>\r
-#include <TPluginManager.h>\r
-#include <TH1F.h>\r
-#include <TH2F.h>\r
-#include <TProfile.h>\r
-#include <TF1.h>\r
-#include <TFile.h>\r
-#include <TFitter.h>\r
-#include "TMinuitMinimizer.h"\r
-\r
-//AliRoot\r
-#include <AliRawReaderDate.h>\r
-#include <AliRawEventHeaderBase.h>\r
-#include <AliZDCRawStream.h>\r
-\r
-int main(int argc, char **argv) {\r
-\r
-  // needed for streamer application\r
-  gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo",\r
-                                        "*",\r
-                                        "TStreamerInfo",\r
-                                        "RIO",\r
-                                        "TStreamerInfo()"); \r
-  // needed for Minuit plugin\r
-  gROOT->GetPluginManager()->AddHandler("ROOT::Math::Minimizer",\r
-                                        "Minuit",\r
-                                        "TMinuitMinimizer",\r
-                                        "Minuit",\r
-                                        "TMinuitMinimizer(const char*)");\r
-\r
-  //TMinuitMinimizer m; \r
-  TVirtualFitter::SetDefaultFitter("Minuit");\r
-\r
-  char *monitor_table[] = { "ALL", "no", "PHY", "yes", "SOD", "all", NULL };\r
-  int err = monitorDeclareTable(monitor_table);\r
-  if(err){\r
-    printf("monitorDeclareTable() failed: %s\n", monitorDecodeError(err));\r
-    return -1;\r
-  } \r
-  \r
-  int status=0, nphys=0;\r
-  int const kNModules = 9;\r
-  int const kNChannels = 24;\r
-  int const kNScChannels = 32;  \r
-  int const kZDCTDCGeo = 4;\r
-  \r
-  int itdc=0, iprevtdc=-1, ihittdc=0;\r
-  float tdcData[6], tdcL0=-999.;       \r
-  for(int ij=0; ij<6; ij++) tdcData[ij]=-999.;\r
-  \r
-  Int_t iMod=-1;\r
-  Int_t modGeo[kNModules], modType[kNModules],modNCh[kNModules];\r
-  for(Int_t kl=0; kl<kNModules; kl++){\r
-     modGeo[kl]=modType[kl]=modNCh[kl]=0;\r
-  }\r
-  \r
-  Int_t ich=0;\r
-  Int_t adcMod[2*kNChannels], adcCh[2*kNChannels], sigCode[2*kNChannels];\r
-  Int_t det[2*kNChannels], sec[2*kNChannels];\r
-  for(Int_t y=0; y<2*kNChannels; y++){\r
-    adcMod[y]=adcCh[y]=sigCode[y]=det[y]=sec[y]=0;\r
-  }\r
-  \r
-  Int_t iScCh=0;\r
-  Int_t scMod[kNScChannels], scCh[kNScChannels], scSigCode[kNScChannels];\r
-  Int_t scDet[kNScChannels], scSec[kNScChannels];\r
-  for(Int_t y=0; y<kNScChannels; y++){\r
-    scMod[y]=scCh[y]=scSigCode[y]=scDet[y]=scSec[y]=0;\r
-  }\r
-      \r
-  Int_t itdcCh=0;\r
-  Int_t tdcMod[kNScChannels], tdcCh[kNScChannels], tdcSigCode[kNScChannels];\r
-  Int_t tdcDet[kNScChannels], tdcSec[kNScChannels];\r
-  for(Int_t y=0; y<kNScChannels; y++){\r
-    tdcMod[y]=tdcCh[y]=tdcSigCode[y]=tdcDet[y]=tdcSec[y]=-1;\r
-  }\r
\r
-  TH1F * hTDC[6]={0x0,0x0,0x0,0x0,0x0,0x0};\r
-  for(int it=0; it<6; it++){\r
-    if(it==0) hTDC[it] = new TH1F("TDCZEM1","TDC ZEM1",200, -200., 200.);\r
-    else if(it==1) hTDC[it] = new TH1F("TDCZEM2","TDC ZEM2",200, -200., 200.);\r
-    else if(it==2) hTDC[it] = new TH1F("TDCZNC", "TDC ZNC", 200, -200., 200.);\r
-    else if(it==3) hTDC[it] = new TH1F("TDCZPC", "TDC ZPC", 200, -200., 200.);\r
-    else if(it==4) hTDC[it] = new TH1F("TDCZNA", "TDC ZNA", 200, -200., 200.);\r
-    else if(it==5) hTDC[it] = new TH1F("TDCZPA", "TDC ZPA", 200, -200., 200.);\r
-  }\r
-  \r
-  /* log start of process */\r
-  printf("\n ZDC MAPPING program started\n");  \r
-  signal(SIGSEGV, SIG_DFL);\r
-\r
-  /* check that we got some arguments = list of files */\r
-  if(argc<2) {\r
-    printf("Wrong number of arguments\n");\r
-    return -1;\r
-  }\r
-  \r
-  FILE *mapFile4Shuttle;\r
-\r
-  /* read the data files */\r
-  for(int n=1;n<argc;n++){\r
-   \r
-    status=monitorSetDataSource( argv[n] );\r
-    if (status!=0) {\r
-      printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));\r
-      return -1;\r
-    }\r
-    \r
-    /* declare monitoring program */\r
-    status=monitorDeclareMp( __FILE__ );\r
-    if (status!=0) {\r
-      printf("monitorDeclareMp() failed : %s\n",monitorDecodeError(status));\r
-      return -1;\r
-    }\r
-    monitorSetNowait();\r
-    monitorSetNoWaitNetworkTimeout(1000);\r
-\r
-\r
-    int iev = 0;\r
-    //Bool_t sodRead = kFALSE;\r
-    //while(!sodRead){\r
-    \r
-    /* loop on events (infinite) */\r
-    for(;;) {\r
-      \r
-      if(nphys > 50000) break;\r
-      \r
-      struct eventHeaderStruct *event;\r
-      eventTypeType eventT;\r
\r
-      /* check shutdown condition */\r
-      if (daqDA_checkShutdown()) {break;}\r
-\r
-      /* get next event */\r
-      status=monitorGetEventDynamic((void **)&event);\r
-      if(status==MON_ERR_EOF){\r
-        printf ("End of File detected\n");\r
-        break; /* end of monitoring file has been reached */\r
-      }\r
-      if(status!=0) {\r
-        printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));\r
-        return -1;\r
-      }\r
-\r
-      /* retry if got no event */\r
-      if(event==NULL) continue;\r
-      \r
-      // Initalize raw-data reading and decoding\r
-      AliRawReader *reader = new AliRawReaderDate((void*)event);\r
-      reader->Reset();\r
-      reader->Select("ZDC");\r
-      // --- Reading event header\r
-      //UInt_t evtype = reader->GetType();\r
-      //printf("\t ZDCMAPPINGda -> run # %d\n",reader->GetRunNumber());\r
-      //\r
-      AliZDCRawStream *rawStreamZDC = new AliZDCRawStream(reader);\r
-        \r
-       \r
-      /* use event - here, just write event id to result file */\r
-      eventT=event->eventType;\r
-      \r
-      if(eventT==START_OF_DATA){\r
-               \r
-       rawStreamZDC->SetSODReading(kTRUE);\r
-       \r
-       // --------------------------------------------------------\r
-       // --- Writing ascii data file for the Shuttle preprocessor\r
-        mapFile4Shuttle = fopen(MAPDATA_FILE,"w");\r
-       //if(rawStreamZDC->Next()){\r
-         while((rawStreamZDC->Next())){\r
-            if(rawStreamZDC->IsHeaderMapping()){ // mapping header\r
-              iMod++;\r
-              modGeo[iMod]  = rawStreamZDC->GetADCModule();\r
-              modType[iMod] = rawStreamZDC->GetModType();\r
-              modNCh[iMod]  = rawStreamZDC->GetADCNChannels();\r
-           }\r
-            if(rawStreamZDC->IsChMapping()){ \r
-             if(modType[iMod]==1){ // ADC mapping ----------------------\r
-               adcMod[ich]  = rawStreamZDC->GetADCModFromMap(ich);\r
-               adcCh[ich]   = rawStreamZDC->GetADCChFromMap(ich);\r
-               sigCode[ich] = rawStreamZDC->GetADCSignFromMap(ich);\r
-               det[ich]     = rawStreamZDC->GetDetectorFromMap(ich);\r
-               sec[ich]     = rawStreamZDC->GetTowerFromMap(ich);\r
-               ich++;\r
-             }\r
-             else if(modType[iMod]==2){ // VME scaler mapping -------------\r
-               scMod[iScCh]     = rawStreamZDC->GetScalerModFromMap(iScCh);\r
-               scCh[iScCh]      = rawStreamZDC->GetScalerChFromMap(iScCh);\r
-               scSigCode[iScCh] = rawStreamZDC->GetScalerSignFromMap(iScCh);\r
-               scDet[iScCh]     = rawStreamZDC->GetScDetectorFromMap(iScCh);\r
-               scSec[iScCh]     = rawStreamZDC->GetScTowerFromMap(iScCh);\r
-               iScCh++;\r
-             }\r
-             else if(modType[iMod]==6 && modGeo[iMod]==4){ // ZDC TDC mapping --------------------\r
-               tdcMod[itdcCh]     = rawStreamZDC->GetTDCModFromMap(itdcCh);\r
-               tdcCh[itdcCh]      = rawStreamZDC->GetTDCChFromMap(itdcCh);\r
-               tdcSigCode[itdcCh] = rawStreamZDC->GetTDCSignFromMap(itdcCh);\r
-               itdcCh++;\r
-             }\r
-           }\r
-         }\r
-         // Writing data on output FXS file\r
-         for(Int_t is=0; is<2*kNChannels; is++){\r
-            fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\t%d\t%d\t%d\n",\r
-              is,adcMod[is],adcCh[is],sigCode[is],det[is],sec[is]);\r
-            //printf("  Mapping DA -> %d ADC: mod %d ch %d, code %d det %d, sec %d\n",\r
-              //is,adcMod[is],adcCh[is],sigCode[is],det[is],sec[is]);\r
-         }\r
-         for(Int_t is=0; is<kNScChannels; is++){\r
-            fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\t%d\t%d\t%d\n",\r
-              is,scMod[is],scCh[is],scSigCode[is],scDet[is],scSec[is]);\r
-            //if(scMod[is]!=-1) printf("  Mapping DA -> %d Scaler: mod %d ch %d, code %d det %d, sec %d\n",\r
-              //is,scMod[is],scCh[is],scSigCode[is],scDet[is],scSec[is]);\r
-         }\r
-         for(Int_t is=0; is<kNScChannels; is++){\r
-            fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\t%d\n",\r
-              is,tdcMod[is],tdcCh[is],tdcSigCode[is]);\r
-            //if(tdcMod[is]!=-1) printf("  Mapping DA -> %d TDC: mod %d ch %d, code %d\n",\r
-              //is,tdcMod[is],tdcCh[is],tdcSigCode[is]);\r
-         }\r
-         for(Int_t is=0; is<kNModules; is++){\r
-            fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\n",\r
-            modGeo[is],modType[is],modNCh[is]);\r
-            //printf("  Mapping DA -> Module mapping: geo %d type %d #ch %d\n",\r
-              //modGeo[is],modType[is],modNCh[is]);\r
-         }\r
-         \r
-       //} //if (rawstream)\r
-        fclose(mapFile4Shuttle);\r
-      }// SOD event\r
-      else if(eventT==PHYSICS_EVENT){ \r
-\r
-        for(int ij=0; ij<6; ij++) tdcData[ij]=-999.;\r
-       rawStreamZDC->SetSODReading(kTRUE);\r
-\r
-       // ----- Setting ch. mapping -----\r
-       for(int jk=0; jk<2*kNChannels; jk++){\r
-         rawStreamZDC->SetMapADCMod(jk, adcMod[jk]);\r
-         rawStreamZDC->SetMapADCCh(jk, adcCh[jk]);\r
-         rawStreamZDC->SetMapADCSig(jk, sigCode[jk]);\r
-         rawStreamZDC->SetMapDet(jk, det[jk]);\r
-         rawStreamZDC->SetMapTow(jk, sec[jk]);\r
-       }\r
-       \r
-       while(rawStreamZDC->Next()){\r
-         if(rawStreamZDC->GetADCModule()!=kZDCTDCGeo) continue; //skipping ADCs, scalers and trigger cards\r
-\r
-          if(rawStreamZDC->GetADCModule()==kZDCTDCGeo && rawStreamZDC->IsZDCTDCDatum()==kTRUE){\r
-             //\r
-            itdc = rawStreamZDC->GetChannel(); \r
-             if(itdc==iprevtdc) ihittdc++;\r
-             else ihittdc=0;\r
-             iprevtdc=itdc;\r
-            //\r
-            if(((itdc>=8 && itdc<=13) || itdc==15) && ihittdc==0){\r
-               if(itdc!=15){\r
-                tdcData[itdc-8] = 0.025*rawStreamZDC->GetZDCTDCDatum();\r
-                //\r
-                //printf("   ev.%d **** TDC%d %1.0f ns  \n",nphys,itdc, tdcData[itdc-8]);\r
-              }\r
-              //\r
-              else if(itdc==15){\r
-                 tdcL0 = 0.025*rawStreamZDC->GetZDCTDCDatum();\r
-                 //\r
-                 //printf("   ev.%d ++++ TDCL0 %1.0f ns  \n",nphys,tdcL0);\r
-                 //\r
-                 for(int ic=0; ic<6; ic++){\r
-                   if(tdcData[ic]!=-999. && tdcL0!=-999.){\r
-                     hTDC[ic]->Fill(tdcData[ic]-tdcL0);\r
-                     //printf(" ev.%d -> Filling histo%d: %f ns\n",nphys,ic, tdcData[ic]-tdcL0);\r
-                   }\r
-                 }\r
-               }\r
-            }\r
-         }\r
-        }\r
-       \r
-       nphys++;\r
-      \r
-        delete rawStreamZDC;\r
-        rawStreamZDC = 0x0;    \r
-       delete reader;\r
-\r
-      }//(if PHYSICS_EVENT) \r
-      else if(eventT==END_OF_RUN){\r
-        printf("End Of Run detected\n");\r
-        break;\r
-      }\r
-      \r
-      iev++; \r
-\r
-      /* free resources */\r
-      free(event);\r
\r
-    } // event loop    \r
-      \r
-  }\r
-  printf(" \n # of physics events analyzed = %d\n\n", nphys);\r
-\r
-  /* Analysis of the histograms */\r
-  //\r
-  FILE *fileShuttle;\r
-  fileShuttle = fopen(TDCDATA_FILE,"w");\r
-  //\r
-  Float_t xUp=0., xLow=0., deltaX=0;\r
-  Int_t binMax=0, nBinsx=0;\r
-  Float_t mean[6]={0.,0.,0.,0.,0.,0.}, sigma[6]={0.,0.,0.,0.,0.,0.};\r
-  TF1 *fitfun[6]={0x0,0x0,0x0,0x0,0x0,0x0};\r
-  for(int k=0; k<6; k++){\r
-    if(hTDC[k]->GetEntries()!=0){\r
-       binMax = hTDC[k]->GetMaximumBin();\r
-       if(binMax<=1){\r
-         printf("\n WARNING! Something wrong with det %d histo \n\n", k);\r
-         continue;\r
-       }\r
-       // \r
-       xUp = (hTDC[k]->GetXaxis())->GetXmax();\r
-       xLow = (hTDC[k]->GetXaxis())->GetXmin();\r
-       deltaX = xUp-xLow;\r
-       nBinsx = (hTDC[k]->GetXaxis())->GetNbins();\r
-       //printf(" xMax = %f\n", xLow+binMax*deltaX/nBinsx);\r
-       hTDC[k]->Fit("gaus","Q","",xLow+binMax*deltaX/nBinsx*0.75,xLow+binMax*deltaX/nBinsx*1.25);\r
-       fitfun[k] = hTDC[k]->GetFunction("gaus");\r
-       mean[k] = (Float_t) (fitfun[k]->GetParameter(1));\r
-       sigma[k] = (Float_t) (fitfun[k]->GetParameter(2));\r
-       //printf("\t Mean value from fit = %1.2f ns\n", mean[k]);\r
-       //\r
-       fprintf(fileShuttle,"\t%f\t%f\n",mean[k], sigma[k]);\r
-     }\r
-     else printf("  WARNING! TDC histo %d has no entries and can't be processed!\n",k);\r
-  }\r
-  //                                                  \r
-  fclose(fileShuttle);\r
-  \r
-  TFile *histofile = new TFile(TDCHISTO_FILE,"RECREATE");\r
-  histofile->cd();\r
-  for(int k=0; k<6; k++) hTDC[k]->Write();                                                    \r
-  histofile->Close();\r
-  //\r
-  for(Int_t j=0; j<6; j++) delete hTDC[j];\r
-  \r
-  /* store the result files on FES */\r
-  // [1] File with mapping\r
-  status = daqDA_FES_storeFile(MAPDATA_FILE, "MAPPING");\r
-  if(status){\r
-    printf("Failed to export file : %d\n",status);\r
-    return -1;\r
-  }\r
-  // [2] File with TDC data\r
-  status = daqDA_FES_storeFile(TDCDATA_FILE, "TDCDATA");\r
-  if(status){\r
-    printf("Failed to export TDC data file to DAQ FES\n");\r
-    return -1;\r
-  }\r
-  // [3] File with TDC histos\r
-  status = daqDA_FES_storeFile(TDCHISTO_FILE, "TDCHISTOS");\r
-  if(status){\r
-    printf("Failed to export TDC histos file to DAQ FES\n");\r
-    return -1;\r
-  }\r
-\r
-  return status;\r
-}\r
+/*
+
+This program reads the DAQ data files passed as argument using the monitoring library.
+
+The program reports about its processing progress.
+
+Messages on stdout are exported to DAQ log system.
+
+DA to write mapping for ADC modules and VME scaler
+
+Contact: Chiara.Oppedisano@to.infn.it
+Link: 
+Run Type: PHYSICS
+DA Type: MON
+Number of events needed: at least 50% 
+Input Files:  none
+Output Files: ZDCChMapping.dat
+Trigger Types Used: different trigger types are used
+
+*/
+
+#define MAPDATA_FILE  "ZDCChMapping.dat"
+#define TDCDATA_FILE  "ZDCTDCCalib.dat"
+#define TDCHISTO_FILE "ZDCTDCHisto.root"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <Riostream.h>
+#include <signal.h>
+
+// DATE
+#include <event.h>
+#include <monitor.h>
+#include <daqDA.h>
+
+//ROOT
+#include <TROOT.h>
+#include <TPluginManager.h>
+#include <TH1F.h>
+#include <TH2F.h>
+#include <TProfile.h>
+#include <TF1.h>
+#include <TFile.h>
+#include <TFitter.h>
+#include "TMinuitMinimizer.h"
+
+//AliRoot
+#include <AliRawReaderDate.h>
+#include <AliRawEventHeaderBase.h>
+#include <AliZDCRawStream.h>
+
+int main(int argc, char **argv) {
+
+  // needed for streamer application
+  gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo",
+                                        "*",
+                                        "TStreamerInfo",
+                                        "RIO",
+                                        "TStreamerInfo()"); 
+  // needed for Minuit plugin
+  gROOT->GetPluginManager()->AddHandler("ROOT::Math::Minimizer",
+                                        "Minuit",
+                                        "TMinuitMinimizer",
+                                        "Minuit",
+                                        "TMinuitMinimizer(const char*)");
+
+  //TMinuitMinimizer m; 
+  TVirtualFitter::SetDefaultFitter("Minuit");
+
+  char *monitor_table[] = { "ALL", "no", "PHY", "yes", "SOD", "all", NULL };
+  int err = monitorDeclareTable(monitor_table);
+  if(err){
+    printf("monitorDeclareTable() failed: %s\n", monitorDecodeError(err));
+    return -1;
+  } 
+  
+  int status=0, nphys=0;
+  int const kNModules = 9;
+  int const kNChannels = 24;
+  int const kNScChannels = 32;  
+  int const kZDCTDCGeo = 4;
+  
+  int itdc=0, iprevtdc=-1, ihittdc=0;
+  float tdcData[6], tdcL0=-999.;       
+  for(int ij=0; ij<6; ij++) tdcData[ij]=-999.;
+  
+  Int_t iMod=-1;
+  Int_t modGeo[kNModules], modType[kNModules],modNCh[kNModules];
+  for(Int_t kl=0; kl<kNModules; kl++){
+     modGeo[kl]=modType[kl]=modNCh[kl]=0;
+  }
+  
+  Int_t ich=0;
+  Int_t adcMod[2*kNChannels], adcCh[2*kNChannels], sigCode[2*kNChannels];
+  Int_t det[2*kNChannels], sec[2*kNChannels];
+  for(Int_t y=0; y<2*kNChannels; y++){
+    adcMod[y]=adcCh[y]=sigCode[y]=det[y]=sec[y]=0;
+  }
+  
+  Int_t iScCh=0;
+  Int_t scMod[kNScChannels], scCh[kNScChannels], scSigCode[kNScChannels];
+  Int_t scDet[kNScChannels], scSec[kNScChannels];
+  for(Int_t y=0; y<kNScChannels; y++){
+    scMod[y]=scCh[y]=scSigCode[y]=scDet[y]=scSec[y]=0;
+  }
+      
+  Int_t itdcCh=0;
+  Int_t tdcMod[kNScChannels], tdcCh[kNScChannels], tdcSigCode[kNScChannels];
+  Int_t tdcDet[kNScChannels], tdcSec[kNScChannels];
+  for(Int_t y=0; y<kNScChannels; y++){
+    tdcMod[y]=tdcCh[y]=tdcSigCode[y]=tdcDet[y]=tdcSec[y]=-1;
+  }
+  TH1F * hTDC[6]={0x0,0x0,0x0,0x0,0x0,0x0};
+  for(int it=0; it<6; it++){
+    if(it==0) hTDC[it] = new TH1F("TDCZEM1","TDC ZEM1",200, -200., 200.);
+    else if(it==1) hTDC[it] = new TH1F("TDCZEM2","TDC ZEM2",200, -200., 200.);
+    else if(it==2) hTDC[it] = new TH1F("TDCZNC", "TDC ZNC", 200, -200., 200.);
+    else if(it==3) hTDC[it] = new TH1F("TDCZPC", "TDC ZPC", 200, -200., 200.);
+    else if(it==4) hTDC[it] = new TH1F("TDCZNA", "TDC ZNA", 200, -200., 200.);
+    else if(it==5) hTDC[it] = new TH1F("TDCZPA", "TDC ZPA", 200, -200., 200.);
+  }
+  
+  /* log start of process */
+  printf("\n ZDC MAPPING program started\n");  
+  signal(SIGSEGV, SIG_DFL);
+
+  /* check that we got some arguments = list of files */
+  if(argc<2) {
+    printf("Wrong number of arguments\n");
+    return -1;
+  }
+  
+  FILE *mapFile4Shuttle;
+
+  /* read the data files */
+  for(int n=1;n<argc;n++){
+   
+    status=monitorSetDataSource( argv[n] );
+    if (status!=0) {
+      printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
+      return -1;
+    }
+    
+    /* declare monitoring program */
+    status=monitorDeclareMp( __FILE__ );
+    if (status!=0) {
+      printf("monitorDeclareMp() failed : %s\n",monitorDecodeError(status));
+      return -1;
+    }
+    monitorSetNowait();
+    monitorSetNoWaitNetworkTimeout(1000);
+
+
+    int iev = 0;
+    //Bool_t sodRead = kFALSE;
+    //while(!sodRead){
+    
+    /* loop on events (infinite) */
+    for(;;) {
+      
+      if(nphys > 50000) break;
+      
+      struct eventHeaderStruct *event;
+      eventTypeType eventT;
+      /* check shutdown condition */
+      if (daqDA_checkShutdown()) {break;}
+
+      /* get next event */
+      status=monitorGetEventDynamic((void **)&event);
+      if(status==MON_ERR_EOF){
+        printf ("End of File detected\n");
+        break; /* end of monitoring file has been reached */
+      }
+      if(status!=0) {
+        printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
+        return -1;
+      }
+
+      /* retry if got no event */
+      if(event==NULL) continue;
+      
+      // Initalize raw-data reading and decoding
+      AliRawReader *reader = new AliRawReaderDate((void*)event);
+      reader->Reset();
+      reader->Select("ZDC");
+      // --- Reading event header
+      //UInt_t evtype = reader->GetType();
+      //printf("\t ZDCMAPPINGda -> run # %d\n",reader->GetRunNumber());
+      //
+      AliZDCRawStream *rawStreamZDC = new AliZDCRawStream(reader);
+        
+       
+      /* use event - here, just write event id to result file */
+      eventT=event->eventType;
+      
+      if(eventT==START_OF_DATA){
+               
+       rawStreamZDC->SetSODReading(kTRUE);
+       
+       // --------------------------------------------------------
+       // --- Writing ascii data file for the Shuttle preprocessor
+        mapFile4Shuttle = fopen(MAPDATA_FILE,"w");
+       //if(rawStreamZDC->Next()){
+         while((rawStreamZDC->Next())){
+            if(rawStreamZDC->IsHeaderMapping()){ // mapping header
+              iMod++;
+              modGeo[iMod]  = rawStreamZDC->GetADCModule();
+              modType[iMod] = rawStreamZDC->GetModType();
+              modNCh[iMod]  = rawStreamZDC->GetADCNChannels();
+           }
+            if(rawStreamZDC->IsChMapping()){ 
+             if(modType[iMod]==1){ // ADC mapping ----------------------
+               adcMod[ich]  = rawStreamZDC->GetADCModFromMap(ich);
+               adcCh[ich]   = rawStreamZDC->GetADCChFromMap(ich);
+               sigCode[ich] = rawStreamZDC->GetADCSignFromMap(ich);
+               det[ich]     = rawStreamZDC->GetDetectorFromMap(ich);
+               sec[ich]     = rawStreamZDC->GetTowerFromMap(ich);
+               ich++;
+             }
+             else if(modType[iMod]==2){ // VME scaler mapping -------------
+               scMod[iScCh]     = rawStreamZDC->GetScalerModFromMap(iScCh);
+               scCh[iScCh]      = rawStreamZDC->GetScalerChFromMap(iScCh);
+               scSigCode[iScCh] = rawStreamZDC->GetScalerSignFromMap(iScCh);
+               scDet[iScCh]     = rawStreamZDC->GetScDetectorFromMap(iScCh);
+               scSec[iScCh]     = rawStreamZDC->GetScTowerFromMap(iScCh);
+               iScCh++;
+             }
+             else if(modType[iMod]==6 && modGeo[iMod]==4){ // ZDC TDC mapping --------------------
+               tdcMod[itdcCh]     = rawStreamZDC->GetTDCModFromMap(itdcCh);
+               tdcCh[itdcCh]      = rawStreamZDC->GetTDCChFromMap(itdcCh);
+               tdcSigCode[itdcCh] = rawStreamZDC->GetTDCSignFromMap(itdcCh);
+               itdcCh++;
+             }
+           }
+         }
+         // Writing data on output FXS file
+         for(Int_t is=0; is<2*kNChannels; is++){
+            fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\t%d\t%d\t%d\n",
+              is,adcMod[is],adcCh[is],sigCode[is],det[is],sec[is]);
+            //printf("  Mapping DA -> %d ADC: mod %d ch %d, code %d det %d, sec %d\n",
+              //is,adcMod[is],adcCh[is],sigCode[is],det[is],sec[is]);
+         }
+         for(Int_t is=0; is<kNScChannels; is++){
+            fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\t%d\t%d\t%d\n",
+              is,scMod[is],scCh[is],scSigCode[is],scDet[is],scSec[is]);
+            //if(scMod[is]!=-1) printf("  Mapping DA -> %d Scaler: mod %d ch %d, code %d det %d, sec %d\n",
+              //is,scMod[is],scCh[is],scSigCode[is],scDet[is],scSec[is]);
+         }
+         for(Int_t is=0; is<kNScChannels; is++){
+            fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\t%d\n",
+              is,tdcMod[is],tdcCh[is],tdcSigCode[is]);
+            //if(tdcMod[is]!=-1) printf("  Mapping DA -> %d TDC: mod %d ch %d, code %d\n",
+              //is,tdcMod[is],tdcCh[is],tdcSigCode[is]);
+         }
+         for(Int_t is=0; is<kNModules; is++){
+            fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\n",
+            modGeo[is],modType[is],modNCh[is]);
+            //printf("  Mapping DA -> Module mapping: geo %d type %d #ch %d\n",
+              //modGeo[is],modType[is],modNCh[is]);
+         }
+         
+       //} //if (rawstream)
+        fclose(mapFile4Shuttle);
+      }// SOD event
+      else if(eventT==PHYSICS_EVENT){ 
+
+        for(int ij=0; ij<6; ij++) tdcData[ij]=-999.;
+       rawStreamZDC->SetSODReading(kTRUE);
+
+       // ----- Setting ch. mapping -----
+       for(int jk=0; jk<2*kNChannels; jk++){
+         rawStreamZDC->SetMapADCMod(jk, adcMod[jk]);
+         rawStreamZDC->SetMapADCCh(jk, adcCh[jk]);
+         rawStreamZDC->SetMapADCSig(jk, sigCode[jk]);
+         rawStreamZDC->SetMapDet(jk, det[jk]);
+         rawStreamZDC->SetMapTow(jk, sec[jk]);
+       }
+       
+       while(rawStreamZDC->Next()){
+         if(rawStreamZDC->GetADCModule()!=kZDCTDCGeo) continue; //skipping ADCs, scalers and trigger cards
+
+          if(rawStreamZDC->GetADCModule()==kZDCTDCGeo && rawStreamZDC->IsZDCTDCDatum()==kTRUE){
+             //
+            itdc = rawStreamZDC->GetChannel(); 
+             if(itdc==iprevtdc) ihittdc++;
+             else ihittdc=0;
+             iprevtdc=itdc;
+            //
+            if(((itdc>=8 && itdc<=13) || itdc==15) && ihittdc==0){
+               if(itdc!=15){
+                tdcData[itdc-8] = 0.025*rawStreamZDC->GetZDCTDCDatum();
+                //
+                //printf("   ev.%d **** TDC%d %1.0f ns  \n",nphys,itdc, tdcData[itdc-8]);
+              }
+              //
+              else if(itdc==15){
+                 tdcL0 = 0.025*rawStreamZDC->GetZDCTDCDatum();
+                 //
+                 //printf("   ev.%d ++++ TDCL0 %1.0f ns  \n",nphys,tdcL0);
+                 //
+                 for(int ic=0; ic<6; ic++){
+                   if(tdcData[ic]!=-999. && tdcL0!=-999.){
+                     hTDC[ic]->Fill(tdcData[ic]-tdcL0);
+                     //printf(" ev.%d -> Filling histo%d: %f ns\n",nphys,ic, tdcData[ic]-tdcL0);
+                   }
+                 }
+               }
+            }
+         }
+        }
+       
+       nphys++;
+      
+        delete rawStreamZDC;
+        rawStreamZDC = 0x0;    
+       delete reader;
+
+      }//(if PHYSICS_EVENT) 
+      else if(eventT==END_OF_RUN){
+        printf("End Of Run detected\n");
+        break;
+      }
+      
+      iev++; 
+
+      /* free resources */
+      free(event);
+    } // event loop    
+      
+  }
+  printf(" \n # of physics events analyzed = %d\n\n", nphys);
+
+  /* Analysis of the histograms */
+  //
+  FILE *fileShuttle;
+  fileShuttle = fopen(TDCDATA_FILE,"w");
+  //
+  Float_t xUp=0., xLow=0., deltaX=0;
+  Int_t binMax=0, nBinsx=0;
+  Float_t mean[6]={0.,0.,0.,0.,0.,0.}, sigma[6]={0.,0.,0.,0.,0.,0.};
+  TF1 *fitfun[6]={0x0,0x0,0x0,0x0,0x0,0x0};
+  for(int k=0; k<6; k++){
+    if(hTDC[k]->GetEntries()!=0){
+       binMax = hTDC[k]->GetMaximumBin();
+       if(binMax<=1){
+         printf("\n WARNING! Something wrong with det %d histo \n\n", k);
+         continue;
+       }
+       // 
+       xUp = (hTDC[k]->GetXaxis())->GetXmax();
+       xLow = (hTDC[k]->GetXaxis())->GetXmin();
+       deltaX = xUp-xLow;
+       nBinsx = (hTDC[k]->GetXaxis())->GetNbins();
+       //printf(" xMax = %f\n", xLow+binMax*deltaX/nBinsx);
+       hTDC[k]->Fit("gaus","Q","",xLow+binMax*deltaX/nBinsx*0.75,xLow+binMax*deltaX/nBinsx*1.25);
+       fitfun[k] = hTDC[k]->GetFunction("gaus");
+       mean[k] = (Float_t) (fitfun[k]->GetParameter(1));
+       sigma[k] = (Float_t) (fitfun[k]->GetParameter(2));
+       //printf("\t Mean value from fit = %1.2f ns\n", mean[k]);
+       //
+       fprintf(fileShuttle,"\t%f\t%f\n",mean[k], sigma[k]);
+     }
+     else printf("  WARNING! TDC histo %d has no entries and can't be processed!\n",k);
+  }
+  //                                                  
+  fclose(fileShuttle);
+  
+  TFile *histofile = new TFile(TDCHISTO_FILE,"RECREATE");
+  histofile->cd();
+  for(int k=0; k<6; k++) hTDC[k]->Write();                                                    
+  histofile->Close();
+  //
+  for(Int_t j=0; j<6; j++) delete hTDC[j];
+  
+  /* store the result files on FES */
+  // [1] File with mapping
+  status = daqDA_FES_storeFile(MAPDATA_FILE, "MAPPING");
+  if(status){
+    printf("Failed to export file : %d\n",status);
+    return -1;
+  }
+  // [2] File with TDC data
+  status = daqDA_FES_storeFile(TDCDATA_FILE, "TDCDATA");
+  if(status){
+    printf("Failed to export TDC data file to DAQ FES\n");
+    return -1;
+  }
+  // [3] File with TDC histos
+  status = daqDA_FES_storeFile(TDCHISTO_FILE, "TDCHISTOS");
+  if(status){
+    printf("Failed to export TDC histos file to DAQ FES\n");
+    return -1;
+  }
+
+  return status;
+}