2 CPV PED DA for processing pedestal runs and producing pedestal tables for loading to CPV FEE.
4 Contact: Sergey Evdokimov <sevdokim@cern.ch>
5 Link: https://twiki.cern.ch/twiki/bin/view/ALICE/CPVda
6 Reference run: 211758 (/afs/cern.ch/user/s/sevdokim/public/CPV_run211758_pedestal.raw)
9 Number of events needed: 2000 events
10 Input files: raw data file
11 Output files: thr?_??.dat CpvPeds.root
12 Trigger types used: PHYSICS_EVENT
19 #include <Riostream.h>
25 #include "AliPHOSCpvRawStream.h"
26 #include "AliPHOSCpvPedProducer.h"
27 #include "AliPHOSCpvParam.h"
28 #include "AliRawReaderDate.h"
29 #include "AliBitPacking.h"
34 #include "TPluginManager.h"
35 #include "TSAXParser.h"
45 #include "TBenchmark.h"
50 int main( int argc, char **argv )
52 gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo",
62 printf("Wrong number of arguments\n");
66 // log start of process
67 printf("Cpv DA program started\n");
70 daqDA_progressReport(0);
72 status=monitorSetDataSource( argv[1] );
74 printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
78 /* declare monitoring program */
79 status=monitorDeclareMp( __FILE__ );
81 printf("monitorDeclareMp() failed : %s\n",monitorDecodeError(status));
85 /* define wait event timeout - 1s max */
87 monitorSetNoWaitNetworkTimeout(1000);
90 daqDA_progressReport(5);
97 AliPHOSCpvPedProducer * pedProducer = new AliPHOSCpvPedProducer(sigcut);
100 AliRawReader * reader;
102 /* report progress */
103 daqDA_progressReport(10);
105 /* main loop (infinite) */
106 for(;;) { // infinite loop
107 struct eventHeaderStruct *event;
108 eventTypeType eventT;
110 /* check shutdown condition */
111 if (daqDA_checkShutdown()) {break;}
114 status=monitorGetEventDynamic((void **)&event);
115 if (status==MON_ERR_EOF) { // end of monitoring file has been reached
116 printf("End of monitoring file has been reached! \n");
121 printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
125 // retry if got no event
126 if (event==NULL) continue;
128 // use event - here, just write event id to result file
129 eventT=event->eventType;
130 if (eventT==PHYSICS_EVENT) { //we use PHYSICS_EVENT for pedestal not CALIBRATION_EVENT???
132 reader = new AliRawReaderDate((void*)event);
133 pedProducer->LoadNewEvent(reader);
134 if(pedProducer->FillPedestal()) iPhysEvnt++;
136 } // if PHYSICS_EVENT
140 /* exit when last event received, no need to wait for TERM signal */
141 if (eventT==END_OF_RUN) {
142 printf("EOR event detected\n");
147 Printf(" Received %d events, %d good events",iTotEvnt,iPhysEvnt);
148 /* report progress */
149 daqDA_progressReport(80);
151 for(int iDDL = 0; iDDL<AliPHOSCpvParam::kNDDL; iDDL++){
152 if(pedProducer -> CalcPedestal(iDDL)){
153 pedProducer -> WritePedFiles(iDDL);
154 //for (int iCC = 0; iCC<AliPHOSCpvParam::kNRows){
155 // status=daqDA_DB_storeFile(Form("thr%d_%02d.dat", iDDL, iCC));
156 // if(status) printf("Failed to store thr%d_%02d.dat in DAQ DB!\n",iDDL, iCC);
157 // status=daqDA_FES_storeFile(Form("thr%d_%02d.dat", iDDL, iCC));
158 // if(status) printf("Failed to export thr%d_%02d.dat to DAQ FES!\n",iDDL, iCC);
163 pedProducer->WriteAllHistsToFile("CpvPeds.root");
164 status = daqDA_DB_storeFile("CpvPeds.root","CpvPeds.root");
165 if(status) printf("Failed to store CpvPeds.root in DAQ DB!\n");
167 /* report progress */
168 daqDA_progressReport(95);