-/*\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
- gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo",\r
- "*",\r
- "TStreamerInfo",\r
- "RIO",\r
- "TStreamerInfo()"); \r
-\r
- TMinuitMinimizer m; \r
- gROOT->GetPluginManager()->AddHandler("ROOT::Math::Minimizer", "Minuit","TMinuitMinimizer",\r
- "Minuit", "TMinuitMinimizer(const char *)");\r
- TVirtualFitter::SetDefaultFitter("Minuit");\r
-\r
- //const Char_t* tableSOD[] = {"ALL", "no", "SOD", "all", NULL, NULL};\r
- //monitorDeclareTable(const_cast<char**>(tableSOD));\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 = 10;\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];\r
- char ntdchist[20];\r
- for(Int_t it=0; it<6; it++){\r
- if(it==0) hTDC[it] = new TH1F("TDCZNC", "TDC ZNC", 200, -200., 200.);\r
- else if(it==1) hTDC[it] = new TH1F("TDCZNA", "TDC ZNA", 200, -200., 200.);\r
- else if(it==2) hTDC[it] = new TH1F("TDCZPC", "TDC ZPC", 200, -200., 200.);\r
- else if(it==3) hTDC[it] = new TH1F("TDCZPA", "TDC ZPA", 200, -200., 200.);\r
- else if(it==4) hTDC[it] = new TH1F("TDCZEM1","TDC ZEM1",200, -200., 200.);\r
- else if(it==5) hTDC[it] = new TH1F("TDCZEM2","TDC ZEM2",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
- int n;\r
- for(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
- 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_t 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(eventT==PHYSICS_EVENT && rawStreamZDC->GetADCModule()==kZDCTDCGeo && rawStreamZDC->IsZDCTDCDatum()==kTRUE){\r
- //\r
- itdc = rawStreamZDC->GetChannel(); \r
- if((itdc>=8 && itdc<=13) || itdc==15){\r
- if(itdc==iprevtdc) ihittdc++;\r
- else ihittdc=0;\r
- iprevtdc=itdc;\r
- if(ihittdc<1 && itdc!=15) tdcData[itdc-8] = 0.025*rawStreamZDC->GetZDCTDCDatum();\r
- if(itdc==15 && ihittdc<1) tdcL0 = 0.025*rawStreamZDC->GetZDCTDCDatum();\r
- }\r
- }\r
- }\r
- \r
- for(int ic=0; ic<6; ic++){\r
- if(tdcData[ic]!=-999. && tdcL0!=-999.) hTDC[ic]->Fill(tdcData[ic]-tdcL0);\r
- }\r
- nphys++;\r
- \r
- }//(if PHYSICS_EVENT) \r
- else if(eventT==END_OF_RUN){\r
- printf("End Of Run detected\n");\r
- break;\r
- }\r
- \r
- delete rawStreamZDC;\r
- rawStreamZDC = 0x0;\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], sigma[6];\r
- TF1 *fitfun[6];\r
- for(Int_t 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\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;
+}