-/*
-
-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, CALIBRATION_BC, CALIBRATION_CENTRAL,
- CALIBRATION_MB, CALIBRATION_SEMICENTRAL, CALIBRATION_COSMIC
-DA Type: MON
-Number of events needed: 1 (SOD is read)
-Input Files: none
-Output Files: ZDCChMapping.dat
-Trigger Types Used: different trigger types are 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>
-
-int main(int argc, char **argv) {
-
- const Char_t* tableSOD[] = {"ALL", "no", "SOD", "all", NULL, NULL};
- monitorDeclareTable(const_cast<char**>(tableSOD));
-
- int status = 0;
- int const kNModules = 10;
- int const kNChannels = 24;
- int const kNScChannels = 32;
-
- /* log start of process */
- printf("\n ZDC MAPPING program started\n");
-
- /* 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 */
- int n;
- for(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);
-
- struct eventHeaderStruct *event;
- eventTypeType eventT;
-
- Int_t iev = 0;
- Bool_t sodRead = kFALSE;
- while(!sodRead && iev<1000){
-
- /* 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->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){
-
-
- 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]=-1;
- }
-
- 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]=-1;
- }
-
- 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;
- }
-
- rawStreamZDC->SetSODReading(kTRUE);
-
- // --------------------------------------------------------
- // --- Writing ascii data file for the Shuttle preprocessor
- mapFile4Shuttle = fopen(MAPDATA_FILE,"w");
- if(!rawStreamZDC->Next()) printf(" \t No raw data found!! \n");
- else{
- 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]);
- }
-
- }
- fclose(mapFile4Shuttle);
- }// SOD event
- else{
- if(sodRead){
- printf("\t SOR read -> exiting from DA\n");
- break;
- }
- else continue;
- }
-
- iev++;
-
- /* free resources */
- free(event);
- }
-
- }
-
- /* store the result files on FES */
- status = daqDA_FES_storeFile(MAPDATA_FILE, "MAPPING");
- if(status){
- printf("Failed to export file : %d\n",status);
- return -1;
- }
-
- 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