Missing declarations related to the PMD DA code. Corrected destructors of the calibra...
[u/mrichter/AliRoot.git] / PMD / PMDda.cxx
1 /*
2
3 DAcase2.c
4
5 This program connects to the DAQ data source passed as argument
6 and populates local "./result.txt" file with the ids of events received
7 during the run.
8
9 The program exits when being asked to shut down (daqDA_checkshutdown)
10 or End of Run event.
11
12 Messages on stdout are exported to DAQ log system.
13
14 contact: alice-datesupport@cern.ch
15
16 */
17 extern "C" {
18 #include <daqDA.h>
19 }
20
21 #include "event.h"
22 #include "monitor.h"
23 //#include "daqDA.h"
24
25 #include <Riostream.h>
26 #include <stdio.h>
27 #include <stdlib.h>
28
29 //AliRoot
30 #include "AliRawReaderDate.h"
31 #include "AliPMDCalibPedestal.h"
32 #include "AliPMDCalibGain.h"
33
34 //ROOT
35 #include "TFile.h"
36 #include "TH1F.h"
37 #include "TBenchmark.h"
38 #include "TTree.h"
39
40 /* Main routine
41       Arguments: 
42       1- monitoring data source
43 */
44 int main(int argc, char **argv) {
45   
46   AliPMDCalibPedestal calibped;
47   AliPMDCalibGain calibgain;
48
49   TTree *ped  = new TTree("ped","PMD Pedestal tree");
50   TTree *gain = new TTree("gain","PMD Gain tree");
51
52   TH1F::AddDirectory(0);
53   
54       
55   // decoding the events
56   
57   int status;
58
59   if (argc!=2) {
60     printf("Wrong number of arguments\n");
61     return -1;
62   }
63
64   /* open result file */
65   FILE *fp=NULL;
66   fp=fopen("./result.txt","a");
67   if (fp==NULL) {
68     printf("Failed to open file\n");
69     return -1;
70   }
71
72   /* define data source : this is argument 1 */  
73   status=monitorSetDataSource( argv[1] );
74   if (status!=0) {
75     printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
76     return -1;
77   }
78
79   /* declare monitoring program */
80   status=monitorDeclareMp( __FILE__ );
81   if (status!=0) {
82     printf("monitorDeclareMp() failed : %s\n",monitorDecodeError(status));
83     return -1;
84   }
85
86   /* define wait event timeout - 1s max */
87   monitorSetNowait();
88   monitorSetNoWaitNetworkTimeout(1000);
89   
90   /* log start of process */
91   printf("DA example case2 monitoring program started\n");  
92
93   /* init some counters */
94   int nevents_physics=0;
95   int nevents_total=0;
96
97   struct eventHeaderStruct *event;
98   eventTypeType eventT;
99   Int_t iev=0;
100
101   /* main loop (infinite) */
102   for(;;) {
103     
104     /* check shutdown condition */
105     if (daqDA_checkShutdown()) {break;}
106     
107     /* get next event (blocking call until timeout) */
108     status=monitorGetEventDynamic((void **)&event);
109     if (status==MON_ERR_EOF) {
110       printf ("End of File detected\n");
111       break; /* end of monitoring file has been reached */
112     }
113     
114     if (status!=0) {
115       printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
116       break;
117     }
118     
119     /* retry if got no event */
120     if (event==NULL) {
121       continue;
122     }
123
124     iev++; 
125
126    /* use event - here, just write event id to result file */
127     eventT=event->eventType;
128     switch (event->eventType){
129       
130       /* START OF RUN */
131     case START_OF_RUN:
132       break;
133       /* END START OF RUN */
134       
135     /* END OF RUN */
136     case END_OF_RUN:
137       break;
138       
139     case PHYSICS_EVENT:
140       printf(" event number = %i \n",iev);
141       AliRawReader *rawReader = new AliRawReaderDate((void*)event);
142       calibped.ProcessEvent(rawReader);
143
144       calibgain.ProcessEvent(rawReader);
145
146       delete rawReader;
147       rawReader = 0x0;
148
149     }
150        
151     /* free resources */
152     free(event);
153     
154     /* exit when last event received, no need to wait for TERM signal */
155     if (eventT==END_OF_RUN) {
156       printf("EOR event detected\n");
157       calibped.Analyse(ped);
158       calibgain.Analyse(gain);
159
160       break;
161     }
162   }
163   
164   //write the Run level file   
165   TFile * fileRun = new TFile ("outPMDdaRun.root","RECREATE"); 
166   TBenchmark *bench = new TBenchmark();
167   bench->Start("PMD");
168   bench->Stop("PMD");
169   bench->Print("PMD");
170   fileRun->Close();
171
172   /* write report */
173   fprintf(fp,"Run #%s, received %d physics events out of %d\n",getenv("DATE_RUN_NUMBER"),nevents_physics,nevents_total);
174
175
176   TFile * pedRun = new TFile ("pmd_ped.root","RECREATE"); 
177   ped->Write();
178   pedRun->Close();
179
180   TFile * gainRun = new TFile ("pmd_calib.root","RECREATE"); 
181   gain->Write();
182   gainRun->Close();
183
184
185
186   /* close result file */
187   fclose(fp);
188
189
190   return status;
191 }