]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ZDC/ZDCMAPPINGda.cxx
Bug in ZEM2 TDC filling fixed
[u/mrichter/AliRoot.git] / ZDC / ZDCMAPPINGda.cxx
index b01588c00b6cbc7a14c9a6b9f85983aac5a95c89..4625e05a9d906c1d90d8a60920da35f7d9c5656f 100644 (file)
-/*
-
-This program reads the DAQ data files passed as argument using the monitoring library.
-
-It computes the average event size and populates local "./result.txt" file with the 
-result.
-
-The program reports about its processing progress.
-
-Messages on stdout are exported to DAQ log system.
-
-DA for ZDC standalone pedestal runs
-
-Contact: Chiara.Oppedisano@to.infn.it
-Link: 
-Run Type: PHYSICS, STANDALONE_BC, STANDALONE_COSMIC, STANDALONE_CENTRAL, 
-         STANDALONE_MB, STANDALONE_SEMICENTRAL
-DA Type: LDC
-Number of events needed: no constraint 
-Input Files:  
-Output Files: ZDCChMapping.dat
-Trigger Types Used: 
-
-*/
-#define MAPDATA_FILE  "ZDCChMapping.dat"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <Riostream.h>
-
-// DATE
-#include <event.h>
-#include <monitor.h>
-#include <daqDA.h>
-
-//ROOT
-#include <TFile.h>
-
-//AliRoot
-#include <AliRawReaderDate.h>
-#include <AliRawEventHeaderBase.h>
-#include <AliZDCRawStream.h>
-
-
-/* Main routine
-      Arguments: list of DATE raw data files
-*/
-int main(int argc, char **argv) {
-  
-  int status = 0;
-
-  /* log start of process */
-  printf("\nZDC MAPPING program started\n");  
-
-  /* check that we got some arguments = list of files */
-  if (argc<2) {
-    printf("Wrong number of arguments\n");
-    return -1;
-  }
-
-  /* open result file */
-  FILE *fp=NULL;
-  fp=fopen("./result.txt","a");
-  if (fp==NULL) {
-    printf("Failed to open file\n");
-    return -1;
-  }
-  
-  FILE *mapFile4Shuttle;
-  
-  /* report progress */
-  daqDA_progressReport(10);
-
-
-  /* init some counters */
-  int nevents_physics=0;
-  int nevents_total=0;
-
-  /* read the data files */
-  int n;
-  for(n=1;n<argc;n++){
-   
-    status=monitorSetDataSource( argv[n] );
-    if (status!=0) {
-      printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
-      return -1;
-    }
-
-    /* report progress */
-    /* in this example, indexed on the number of files */
-    daqDA_progressReport(10+80*n/argc);
-
-    /* read the file */
-    for(;;) {
-      struct eventHeaderStruct *event;
-      eventTypeType eventT;
-
-      /* get next event */
-      status=monitorGetEventDynamic((void **)&event);
-      if(status==MON_ERR_EOF) 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) {
-        break;
-      }
-      
-      // Initalize raw-data reading and decoding
-      AliRawReader *reader = new AliRawReaderDate((void*)event);
-      reader->Select("ZDC");
-      // --- Reading event header
-      //UInt_t evtype = reader->GetType();
-      //printf("\n\t ZDCPEDESTALda -> ev. type %d\n",evtype);
-      //printf("\t ZDCPEDESTALda -> run # %d\n",reader->GetRunNumber());
-      //
-      AliZDCRawStream *rawStreamZDC = new AliZDCRawStream(reader);
-        
-
-      /* use event - here, just write event id to result file */
-      eventT=event->eventType;
-      
-      Int_t ich=0, adcMod[48], adcCh[48], sigCode[48], det[48], sec[48];
-      if(eventT==START_OF_DATA){
-               
-       if(!rawStreamZDC->Next()) printf(" \t No raw data found!! \n");
-        else{
-         while(rawStreamZDC->Next()){
-            if(rawStreamZDC->IsChMapping()){
-             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++;
-           }
-         }
-       }
-       // --------------------------------------------------------
-       // --- Writing ascii data file for the Shuttle preprocessor
-        mapFile4Shuttle = fopen(MAPDATA_FILE,"w");
-        for(Int_t i=0; i<ich; i++){
-          fprintf(mapFile4Shuttle,"\t%d\t%d\t%d\t%d\t%d\t%d\n",i,
-            adcMod[i],adcCh[i],sigCode[i],det[i],sec[i]);
-          //
-          //printf("ZDCPEDESTALDA.cxx ->  ch.%d mod %d, ch %d, code %d det %d, sec %d\n",
-          //      i,adcMod[i],adcCh[i],sigCode[i],det[i],sec[i]);
-        }
-        fclose(mapFile4Shuttle);
-      }
-
-      nevents_total++;
-
-      /* free resources */
-      free(event);
-    
-    }
-  }  
-  
-  /* write report */
-  fprintf(fp,"Run #%s, received %d physics events out of %d\n",getenv("DATE_RUN_NUMBER"),nevents_physics,nevents_total);
-
-  /* close result file */
-  fclose(fp);
-  
-  /* report progress */
-  daqDA_progressReport(90);
-
-  /* store the result files on FES */
-  status = daqDA_FES_storeFile(MAPDATA_FILE, MAPDATA_FILE);
-  if(status){
-    printf("Failed to export file : %d\n",status);
-    return -1;
-  }
-
-  /* report progress */
-  daqDA_progressReport(100);
-
-  return status;
-}
+/*\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