]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ZDC/ZDCPEDESTALda.cxx
Fixed also smell detection
[u/mrichter/AliRoot.git] / ZDC / ZDCPEDESTALda.cxx
CommitLineData
f3ca8792 1/*
2
3DAcase2.c
4
5This program connects to the DAQ data source passed as argument
6and populates local "./result.txt" file with the ids of events received
7during the run.
8
9The program exits when being asked to shut down (daqDA_checkshutdown)
10or End of Run event.
11
12Messages on stdout are exported to DAQ log system.
13
b3b2b9dd 14DA for ZDC standalone pedestal runs
15Contact: Chiara.Oppedisano@to.infn.it
16Link: /afs/cern.ch/user/c/chiarao/public/RawPed.date
17Run Type: STANDALONE_PEDESTAL_RUN
18DA Type: MON
19Number of events needed: no constraint (tipically ~10^3)
20Input Files:
21Output Files: ZDCPedestal.dat
22Trigger Types Used: Standalone Trigger
f3ca8792 23
24*/
25
26#include <stdio.h>
27#include <Riostream.h>
28
29// DATE
f3ca8792 30#include <daqDA.h>
f3ca8792 31#include <event.h>
32#include <monitor.h>
33
34//ROOT
35#include <TRandom.h>
36#include <TH1F.h>
37#include <TH2F.h>
38#include <TProfile.h>
39#include <TF1.h>
40#include <TFile.h>
41
42//AliRoot
43#include <AliRawReaderDate.h>
44#include <AliZDCRawStream.h>
45
46
47/* Main routine
48 Arguments:
49 1- monitoring data source
50*/
51int main(int argc, char **argv) {
52
53 TH1F::AddDirectory(0);
54 // --- Histograms for ADC pedestals
b3b2b9dd 55 // [22 signal channels + 2 reference PTMs] x 2 gain chains
f3ca8792 56 //
b3b2b9dd 57 int const kNChannels = 24;
58 TH1F *hPedhg[kNChannels], *hPedOutOfTimehg[kNChannels];
59 TH2F *hPedCorrhg[kNChannels];
60 TH1F *hPedlg[kNChannels], *hPedOutOfTimelg[kNChannels];
61 TH2F *hPedCorrlg[kNChannels];
f3ca8792 62 //
b3b2b9dd 63 char namhist1hg[50], namhist2hg[50], namhist3hg[50];
64 char namhist1lg[50], namhist2lg[50], namhist3lg[50];
65 for(Int_t j=0; j<kNChannels; j++){
66 if(j<5){ // ZN1
67 sprintf(namhist1hg,"PedZN1hg_%d",j);
68 sprintf(namhist2hg,"PedZN1hgOutOfTime_%d",j);
69 sprintf(namhist3hg,"PedCorrZN1hg_%d",j);
70 //
71 sprintf(namhist1lg,"PedZN1lg_%d",j);
72 sprintf(namhist2lg,"PedZN1lgOutOfTime_%d",j);
73 sprintf(namhist3lg,"PedCorrZN1lg_%d",j);
74 }
75 else if(j>=5 && j<10){ // ZP1
76 sprintf(namhist1hg,"PedZP1hg_%d",j-5);
77 sprintf(namhist2hg,"PedZP1hgOutOfTime_%d",j-5);
78 sprintf(namhist3hg,"PedCorrZP1hg_%d",j-5);
79 //
80 sprintf(namhist1lg,"PedZP1lg_%d",j-5);
81 sprintf(namhist2lg,"PedZP1lgOutOfTime_%d",j-5);
82 sprintf(namhist3lg,"PedCorrZP1lg_%d",j-5);
f3ca8792 83 }
b3b2b9dd 84 else if(j>=10 && j<12){ // ZEM
85 sprintf(namhist1hg,"PedZEMhg_%d",j-10);
86 sprintf(namhist2hg,"PedZEMhgOutOfTime_%d",j-10);
87 sprintf(namhist3hg,"PedCorrZEMhg_%d",j-10);
88 //
89 sprintf(namhist1lg,"PedZEMlg_%d",j-10);
90 sprintf(namhist2lg,"PedZEMlgOutOfTime_%d",j-10);
91 sprintf(namhist3lg,"PedCorrZEMlg_%d",j-10);
f3ca8792 92 }
b3b2b9dd 93 else if(j>=12 && j<17){ // ZN2
94 sprintf(namhist1hg,"PedZN2hg_%d",j-12);
95 sprintf(namhist2hg,"PedZN2hgOutOfTime_%d",j-12);
96 sprintf(namhist3hg,"PedCorrZN2hg_%d",j-12);
97 //
98 sprintf(namhist1lg,"PedZN2lg_%d",j-12);
99 sprintf(namhist2lg,"PedZN2lgOutOfTime_%d",j-12);
100 sprintf(namhist3lg,"PedCorrZN2lg_%d",j-12);
f3ca8792 101 }
b3b2b9dd 102 else if(j>=17 && j<22){ // ZP2
103 sprintf(namhist1hg,"PedZP2hg_%d",j-17);
104 sprintf(namhist2hg,"PedZP2hgOutOfTime_%d",j-17);
105 sprintf(namhist3hg,"PedCorrZP2hg_%d",j-17);
106 //
107 sprintf(namhist1lg,"PedZP2lg_%d",j-17);
108 sprintf(namhist2lg,"PedZP2lgOutOfTime_%d",j-17);
109 sprintf(namhist3lg,"PedCorrZP2lg_%d",j-17);
f3ca8792 110 }
b3b2b9dd 111 else if(j>=22 && j<24){ //Reference PMs
112 sprintf(namhist1hg,"PedRefhg_%d",j-22);
113 sprintf(namhist2hg,"PedRefhgOutOfTime_%d",j-22);
114 sprintf(namhist3hg,"PedCorrRefhg_%d",j-22);
115 //
116 sprintf(namhist1lg,"PedReflg_%d",j-22);
117 sprintf(namhist2lg,"PedReflgOutOfTime_%d",j-22);
118 sprintf(namhist3lg,"PedCorrReflg_%d",j-22);
f3ca8792 119 }
b3b2b9dd 120 // --- High gain chain histos
121 hPedhg[j] = new TH1F(namhist1hg, namhist1hg, 100,0., 200.);
122 hPedOutOfTimehg[j] = new TH1F(namhist2hg, namhist2hg, 100,0., 200.);
123 hPedCorrhg[j] = new TH2F(namhist3hg,namhist3hg,100,0.,200.,100,0.,200.);
124 // --- Low gain chain histos
125 hPedlg[j] = new TH1F(namhist1lg, namhist1lg, 100,0., 600.);
126 hPedOutOfTimelg[j] = new TH1F(namhist2lg, namhist2lg, 100,0., 600.);
127 hPedCorrlg[j] = new TH2F(namhist3lg,namhist3lg,100,0.,600.,100,0.,600.);
f3ca8792 128 }
129
130 int status;
131
132 if (argc!=2) {
133 printf("Wrong number of arguments\n");
134 return -1;
135 }
136
137
138 /* open result file */
139 FILE *fp=NULL;
140 fp=fopen("./result.txt","a");
141 if (fp==NULL) {
142 printf("Failed to open file\n");
143 return -1;
144 }
145
146
147 /* define data source : this is argument 1 */
148 status = monitorSetDataSource( argv[1] );
149 if(status!=0) {
150 printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
151 return -1;
152 }
153
154
155 /* declare monitoring program */
156 status = monitorDeclareMp( __FILE__ );
157 if (status!=0) {
158 printf("monitorDeclareMp() failed : %s\n",monitorDecodeError(status));
159 return -1;
160 }
161
162
163 /* define wait event timeout - 1s max */
164 monitorSetNowait();
165 monitorSetNoWaitNetworkTimeout(1000);
166
167
168 /* log start of process */
169 printf("ZDC PEDESTAL monitoring program started\n");
170
171 /* init some counters */
172 int nevents_physics=0;
173 int nevents_total=0;
174
175 struct equipmentStruct *equipment;
176 int *eventEnd;
177 int *eventData;
178 int *equipmentEnd;
179 int *equipmentData;
180 int *equipmentID;
1a43342e 181
f3ca8792 182 struct eventHeaderStruct *event;
183 eventTypeType eventT;
184 Int_t iev=0;
185
186 /* main loop (infinite) */
187 for(;;) {
188
189 /* check shutdown condition */
190 if (daqDA_checkShutdown()) {break;}
191
192 /* get next event (blocking call until timeout) */
193 status=monitorGetEventDynamic((void **)&event);
194 if (status==MON_ERR_EOF) {
195 printf ("End of File detected\n");
196 break; /* end of monitoring file has been reached */
197 }
198
199 if (status!=0) {
200 printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
201 break;
202 }
203
204 /* retry if got no event */
205 if (event==NULL) {
206 continue;
207 }
208
209 iev++;
210
211 /* use event - here, just write event id to result file */
212 eventT=event->eventType;
213
214 if(eventT==PHYSICS_EVENT){
215 //fprintf(fp,"Run #%lu, event size: %lu, BC:%u, Orbit:%u, Period:%u\n",
216 //
217 // Initalize raw-data reading and decoding
218 AliRawReader *reader = new AliRawReaderDate((void*)event);
1a43342e 219 const AliRawDataHeader* header = reader->GetDataHeader();
220 if(header) {
b3b2b9dd 221 UChar_t message = header->GetAttributes();
222 if(message & 0x2000000){ // DEDICATED PEDESTAL RUN
223 printf("\t STANDALONE_PEDESTAL_RUN raw data found\n");
1a43342e 224 continue;
225 }
226 else{
b3b2b9dd 227 printf("\t NO STANDALONE_PEDESTAL_RUN raw data found\n");
1a43342e 228 return -1;
229 }
230 }
b3b2b9dd 231 //Commented until we won't have true Raw Data Header...
232 //else{
1a43342e 233 //printf("\t ERROR! No Raw Data Header found!!!\n");
234 //return -1;
f3ca8792 235 //
b3b2b9dd 236 //
1a43342e 237 AliZDCRawStream *rawStreamZDC = new AliZDCRawStream(reader);
f3ca8792 238 //
1a43342e 239 if (!rawStreamZDC->Next()) printf(" \t No raw data found!! \n");
f3ca8792 240 Int_t counter=0;
b3b2b9dd 241 Int_t RawADChg[kNChannels], RawADCoothg[kNChannels];
242 Int_t RawADClg[kNChannels], RawADCootlg[kNChannels];
243 for(Int_t j=0; j<kNChannels; j++){
244 RawADChg[j]=0; RawADCoothg[j]=0;
245 RawADClg[j]=0; RawADCootlg[j]=0;
f3ca8792 246 }
247 while(rawStreamZDC->Next()){
248 Int_t index=-1;
249 if(rawStreamZDC->IsADCDataWord()){
b3b2b9dd 250 if(rawStreamZDC->GetSector(1)!=5){ // Physics signals
251 if(rawStreamZDC->GetSector(0)==1) index = rawStreamZDC->GetSector(1); // *** ZN1
252 else if(rawStreamZDC->GetSector(0)==2) index = rawStreamZDC->GetSector(1)+5; // *** ZP1
253 else if(rawStreamZDC->GetSector(0)==3) index = rawStreamZDC->GetSector(1)+9; // *** ZEM
254 else if(rawStreamZDC->GetSector(0)==4) index = rawStreamZDC->GetSector(1)+12; // *** ZN2
255 else if(rawStreamZDC->GetSector(0)==5) index = rawStreamZDC->GetSector(1)+17; // *** ZP2
f3ca8792 256 }
b3b2b9dd 257 else{ // Reference PMs
258 index = (rawStreamZDC->GetSector(0)-1)/3+22;
f3ca8792 259 }
b3b2b9dd 260 //
261 /*printf("\t counter %d index %d det %d quad %d res %d ADC %d\n", counter, index,
262 rawStreamZDC->GetSector(0), rawStreamZDC->GetSector(1),
263 rawStreamZDC->GetADCGain(), rawStreamZDC->GetADCValue());
264 */
265 //
266 if(counter<2*kNChannels){ // --- In-time pedestals (1st 48 raw data)
267 if(rawStreamZDC->GetADCGain()==0){
268 hPedhg[index]->Fill(rawStreamZDC->GetADCValue());
269 RawADChg[index] = rawStreamZDC->GetADCValue();
270 }
271 else{
272 hPedlg[index]->Fill(rawStreamZDC->GetADCValue());
273 RawADClg[index] = rawStreamZDC->GetADCValue();
274 }
f3ca8792 275 }
b3b2b9dd 276 else{ // --- Out-of-time pedestals
277 if(rawStreamZDC->GetADCGain()==0){
278 hPedOutOfTimehg[index]->Fill(rawStreamZDC->GetADCValue());
279 RawADCoothg[index] = rawStreamZDC->GetADCValue();
280 }
281 else{
282 hPedOutOfTimelg[index]->Fill(rawStreamZDC->GetADCValue());
283 RawADCootlg[index] = rawStreamZDC->GetADCValue();
284 }
f3ca8792 285 }
286 counter++;
287 }//IsADCDataWord()
288 //
b3b2b9dd 289 if(counter == 4*kNChannels){ // Last ADC channel -> Filling correlation histos
290 for(Int_t k=0; k<kNChannels; k++){
291 hPedCorrhg[k]->Fill(RawADCoothg[k], RawADChg[k]);
292 hPedCorrlg[k]->Fill(RawADCootlg[k], RawADClg[k]);
f3ca8792 293 }
294 }
295 }
296 //
297 nevents_physics++;
1a43342e 298
f3ca8792 299 }
300
301 nevents_total++;
302
303
304 /* free resources */
305 free(event);
306
307 /* exit when last event received, no need to wait for TERM signal */
308 if (eventT==END_OF_RUN) {
309 printf("EOR event detected\n");
310 break;
311 }
312 }
313
314 /* Analysis of the histograms */
315 //
316 FILE *fileShuttle;
317 fileShuttle = fopen("ZDCPedestal.dat","w");
318 //
b3b2b9dd 319 Float_t MeanPed[2*kNChannels], MeanPedWidth[2*kNChannels],
320 MeanPedOOT[2*kNChannels], MeanPedWidthOOT[2*kNChannels],
321 CorrCoeff0[2*kNChannels], CorrCoeff1[2*kNChannels];
322 // --- In-time pedestals
323 TF1 *ADCfunchg[kNChannels];
324 for(Int_t i=0; i<kNChannels; i++){
325 hPedhg[i]->Fit("gaus","Q");
326 ADCfunchg[i] = hPedhg[i]->GetFunction("gaus");
327 MeanPed[i] = ADCfunchg[i]->GetParameter(1);
328 MeanPedWidth[i] = ADCfunchg[i]->GetParameter(2);
f3ca8792 329 fprintf(fileShuttle,"\t%f\t%f\n",MeanPed[i],MeanPedWidth[i]);
b3b2b9dd 330 printf("\t MeanPed[%d] = %f\n",i, MeanPed[i]);
331 }
332 TF1 *ADCfunclg[kNChannels];
333 for(Int_t i=0; i<kNChannels; i++){
334 hPedlg[i]->Fit("gaus","Q");
335 ADCfunclg[i] = hPedlg[i]->GetFunction("gaus");
336 MeanPed[i+kNChannels] = ADCfunclg[i]->GetParameter(1);
337 MeanPedWidth[i+kNChannels] = ADCfunclg[i]->GetParameter(2);
338 fprintf(fileShuttle,"\t%f\t%f\n",MeanPed[i+kNChannels],MeanPedWidth[i+kNChannels]);
339 printf("\t MeanPed[%d] = %f\n",i+kNChannels, MeanPed[i+kNChannels]);
f3ca8792 340 }
341 // --- Out-of-time pedestals
b3b2b9dd 342 TF1 *ADCootfunchg[kNChannels];
343 for(Int_t i=0; i<kNChannels; i++){
344 hPedOutOfTimehg[i]->Fit("gaus","Q");
345 ADCootfunchg[i] = hPedOutOfTimehg[i]->GetFunction("gaus");
346 MeanPedOOT[i] = ADCootfunchg[i]->GetParameter(1);
347 MeanPedWidthOOT[i] = ADCootfunchg[i]->GetParameter(2);
f3ca8792 348 fprintf(fileShuttle,"\t%f\t%f\n",MeanPedOOT[i],MeanPedWidthOOT[i]);
b3b2b9dd 349 printf("\t MeanPedOOT[%d] = %f\n",i, MeanPedOOT[i]);
350 }
351 TF1 *ADCootfunclg[kNChannels];
352 for(Int_t i=0; i<kNChannels; i++){
353 hPedOutOfTimelg[i]->Fit("gaus","Q");
354 ADCootfunclg[i] = hPedOutOfTimelg[i]->GetFunction("gaus");
355 MeanPedOOT[i+kNChannels] = ADCootfunclg[i]->GetParameter(1);
356 MeanPedWidthOOT[i+kNChannels] = ADCootfunclg[i]->GetParameter(2);
357 fprintf(fileShuttle,"\t%f\t%f\n",MeanPedOOT[i+kNChannels],MeanPedWidthOOT[i+kNChannels]);
358 printf("\t MeanPedOOT[%d] = %f\n",i+kNChannels, MeanPedOOT[i+kNChannels]);
f3ca8792 359 }
360 //
b3b2b9dd 361 // --- Correlations
362 TProfile *hPedCorrProfhg[kNChannels], *hPedCorrProflg[kNChannels];
363 TF1 *ffunchg[kNChannels], *ffunclg[kNChannels];
f3ca8792 364 char namhist4[50];
b3b2b9dd 365 for(int i=0;i<kNChannels;i++) {
366 sprintf(namhist4,"ADCHRvsOOT%d_Prof",i);
367 hPedCorrProfhg[i] = hPedCorrhg[i]->ProfileX(namhist4,-1,-1,"S");
368 hPedCorrProfhg[i]->SetName(namhist4);
369 hPedCorrProfhg[i]->Fit("pol1","Q");
370 ffunchg[i] = hPedCorrProfhg[i]->GetFunction("pol1");
371 CorrCoeff0[i] = ffunchg[i]->GetParameter(0);
372 CorrCoeff1[i] = ffunchg[i]->GetParameter(1);
f3ca8792 373 fprintf(fileShuttle,"\t%f\t%f\n",CorrCoeff0[i],CorrCoeff1[i]);
b3b2b9dd 374 printf("\t CorrCoeff0[%d] = %f, CorrCoeff1[%d] = %f\n",i, CorrCoeff0[i], i, CorrCoeff1[i]);
375 }
376 for(int i=0;i<kNChannels;i++) {
377 sprintf(namhist4,"ADCLRvsOOT%d_Prof",i);
378 hPedCorrProflg[i] = hPedCorrlg[i]->ProfileX(namhist4,-1,-1,"S");
379 hPedCorrProflg[i]->SetName(namhist4);
380 hPedCorrProflg[i]->Fit("pol1","Q");
381 ffunclg[i] = hPedCorrProflg[i]->GetFunction("pol1");
382 CorrCoeff0[i+kNChannels] = ffunclg[i]->GetParameter(0);
383 CorrCoeff1[i+kNChannels] = ffunclg[i]->GetParameter(1);
384 fprintf(fileShuttle,"\t%f\t%f\n",CorrCoeff0[i+kNChannels],CorrCoeff1[i+kNChannels]);
385 printf("\t CorrCoeff0[%d] = %f, CorrCoeff1[%d] = %f\n",
386 i+kNChannels, CorrCoeff0[i+kNChannels], i+kNChannels, CorrCoeff1[i+kNChannels]);
f3ca8792 387 }
388 //
389 fclose(fileShuttle);
b3b2b9dd 390 //
f3ca8792 391
392
393 /* write report */
394 fprintf(fp,"Run #%s, received %d physics events out of %d\n",getenv("DATE_RUN_NUMBER"),nevents_physics,nevents_total);
395
396 /* close result file */
397 fclose(fp);
398
399
400 return status;
401}