2 *********************************************************
4 this file provides the detector algorithm for HMPID. *
5 *********************************************************
14 #include <Riostream.h>
19 //#include "AliHMPIDRawStream.h"
20 #include "AliRawReaderDate.h"
21 #include "AliBitPacking.h"
29 #include "TBenchmark.h"
33 int main(int argc, char **argv){
37 /* check that we got some arguments = list of files */
39 printf("Wrong number of arguments\n");
43 /* copy locally a file from daq detector config db */
44 status=daqDA_DB_getFile("myconfig","./myconfig.txt");
46 printf("Failed to get config file : %d\n",status);
49 /* and possibly use it */
51 /* open result file */
53 fp=fopen("./result.txt","a");
55 printf("Failed to open file\n");
60 daqDA_progressReport(10);
63 /* init some counters */
64 //int nevents_physics=0;
65 //int nevents_total=0;
67 Float_t SummQ[14][48][11][25], Mean[14][48][11][25], SummQ2[14][48][11][25], Sigma[14][48][11][25];
73 for(Int_t ddl=0;ddl<=13;ddl++) for(Int_t row=1;row<=24;row++) for(Int_t dil=1;dil<=10;dil++) for(Int_t adr=0;adr<=47;adr++)
76 SummQ[ddl][adr][dil][row]=0; SummQ2[ddl][adr][dil][row]=0; Mean[ddl][adr][dil][row]=0; Sigma[ddl][adr][dil][row]=0;
80 for (n=1;n<argc;n++) {
82 status=monitorSetDataSource( argv[n] );
84 printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
89 /* in this example, indexed on the number of files */
90 daqDA_progressReport(10+80*n/argc);
92 for(;;) // infinite loop
95 struct eventHeaderStruct *event;
99 status=monitorGetEventDynamic((void **)&event);
100 if (status==MON_ERR_EOF) break; /* end of monitoring file has been reached */
102 printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
106 /* retry if got no event */
111 /* use event - here, just write event id to result file */
112 eventT=event->eventType;
114 if (eventT==CALIBRATION_EVENT) {
118 AliRawReader *pRR = new AliRawReaderDate((void*)event);
120 pRR->Select("HMPID");//select only one DDL files
122 UInt_t RawDataWord=0;
124 while(pRR->ReadNextInt(RawDataWord)) //raw records loop (in selected DDL files)
126 Int_t ddl = pRR->GetDDLID();
128 Int_t a = AliBitPacking::UnpackWord(RawDataWord,12,17); assert(0<=a&&a<=47); // 1098 7654 3210 9876 5432 1098 7654 3210 DILOGIC address (0..47)
129 Int_t d = AliBitPacking::UnpackWord(RawDataWord,18,21); assert(1<=d&&d<=10); // 3322 2222 2222 1111 1111 1000 0000 0000 DILOGIC number (1..10)
130 Int_t r = AliBitPacking::UnpackWord(RawDataWord,22,26); assert(1<=r&&r<=24); // Row number (1..24)
132 Int_t q = AliBitPacking::UnpackWord(RawDataWord, 0,11); assert(0<=q&&q<=4095); // 0000 0rrr rrdd ddaa aaaa qqqq qqqq qqqq Qdc (0..4095)
134 SummQ[ddl][a][d][r]+=q;
136 SummQ2[ddl][a][d][r]+=(q*q);
142 }// if CALIBRATION_EVENT
144 /* exit when last event received, no need to wait for TERM signal */
145 if (eventT==END_OF_RUN) {
146 printf("EOR event detected\n");
155 /* close result file */
158 /* report progress */
159 daqDA_progressReport(90);
161 /* store the result file on FES */
162 status=daqDA_FES_storeFile("./result.txt","DAcase1_results");
164 printf("Failed to export file : %d\n",status);
168 /* report progress */
169 daqDA_progressReport(100);
173 for(Int_t ddl=0;ddl<=13;ddl++){
175 out.open(Form("HmpidPedDdl%02i.txt",ddl));
177 for(Int_t row=1;row<=24;row++)
179 for(Int_t dil=1;dil<=10;dil++)
181 for(Int_t adr=0;adr<=47;adr++){
183 Mean[ddl][adr][dil][row] = SummQ[ddl][adr][dil][row]/iEvtNcal;
185 Sigma[ddl][adr][dil][row] = TMath::Sqrt(SummQ2[ddl][adr][dil][row]/iEvtNcal - (SummQ[ddl][adr][dil][row]/iEvtNcal)*(SummQ[ddl][adr][dil][row]/iEvtNcal));
187 Int_t inhard=((Int_t(Mean[ddl][adr][dil][row]))<<9)+Int_t(Mean[ddl][adr][dil][row]+3*Sigma[ddl][adr][dil][row]);
189 out << Form("%2i %2i %2i %5.2f %5.2f %x\n",row,dil,adr,Mean[ddl][adr][dil][row],Sigma[ddl][adr][dil][row],inhard);