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
18 //AMORE monitoring framework
22 #include <Riostream.h>
28 #include "AliPHOSCpvRawStream.h"
29 #include "AliPHOSCpvPedProducer.h"
30 #include "AliPHOSCpvParam.h"
31 #include "AliRawReaderDate.h"
32 #include "AliBitPacking.h"
36 #include "TPluginManager.h"
37 #include "TSAXParser.h"
47 #include "TBenchmark.h"
52 int main( int argc, char **argv )
54 gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo",
64 printf("Wrong number of arguments\n");
68 // log start of process
69 printf("Cpv pedestal DA program started\n");
72 daqDA_progressReport(0);
74 status=monitorSetDataSource( argv[1] );
76 printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
80 /* declare monitoring program */
81 status=monitorDeclareMp( __FILE__ );
83 printf("monitorDeclareMp() failed : %s\n",monitorDecodeError(status));
87 /* define wait event timeout - 1s max */
89 monitorSetNoWaitNetworkTimeout(1000);
92 daqDA_progressReport(5);
99 AliPHOSCpvPedProducer * pedProducer = new AliPHOSCpvPedProducer(sigcut);
102 AliRawReader * reader;
104 /* report progress */
105 daqDA_progressReport(10);
107 /* main loop (infinite) */
108 for(;;) { // infinite loop
109 struct eventHeaderStruct *event;
110 eventTypeType eventT;
112 /* check shutdown condition */
113 if (daqDA_checkShutdown()) {break;}
116 status=monitorGetEventDynamic((void **)&event);
117 if (status==MON_ERR_EOF) { // end of monitoring file has been reached
118 printf("End of monitoring file has been reached! \n");
123 printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
127 // retry if got no event
128 if (event==NULL) continue;
130 // use event - here, just write event id to result file
131 eventT=event->eventType;
132 if (eventT==PHYSICS_EVENT) { //we use PHYSICS_EVENT for pedestal not CALIBRATION_EVENT???
134 reader = new AliRawReaderDate((void*)event);
135 pedProducer->LoadNewEvent(reader);
136 if(pedProducer->FillPedestal()) iPhysEvnt++;
138 } // if PHYSICS_EVENT
142 /* exit when last event received, no need to wait for TERM signal */
143 if (eventT==END_OF_RUN) {
144 printf("EOR event detected\n");
149 Printf(" Received %d events, %d good events",iTotEvnt,iPhysEvnt);
150 /* report progress */
151 daqDA_progressReport(95);
153 pedProducer->WriteAllHistsToFile("CpvPeds.root");
155 //send file with histos to amore
156 amore::da::AmoreDA* myAmore = new amore::da::AmoreDA(amore::da::AmoreDA::kSender);
157 TFile* fSend = TFile::Open("CpvPeds.root");
158 TH2F *pedsMean = (TH2F*)fSend->Get("fPedMeanMap4");
159 pedsMean->SetDrawOption("colz");
160 myAmore->Send("fPedMeanMap4",pedsMean);
161 TH2F *pedsSig = (TH2F*)fSend->Get("fPedSigMap4");
162 pedsSig->SetDrawOption("colz");
163 myAmore->Send("fPedSigMap4",pedsSig);
164 TH1F *h1DPedMean=(TH1F*)fSend->Get("f1DPedMean4");
165 h1DPedMean->GetXaxis()->SetRangeUser(0.,750.);
166 myAmore->Send("f1DPedMean4",h1DPedMean);
167 TH1F *h1DPedSig=(TH1F*)fSend->Get("f1DPedSig4");
168 h1DPedSig->GetXaxis()->SetRangeUser(0.,10.);
169 myAmore->Send("f1DPedSig4",h1DPedSig);
172 if(iPhysEvnt>=1000){//we have enough events to publish data
173 status = daqDA_DB_storeFile("CpvPeds.root","CpvPeds.root");
174 if(status) printf("Failed to store CpvPeds.root in DAQ DB!\n");
176 status = daqDA_FES_storeFile("CpvPeds.root","CpvPeds.root");
177 if(status) printf("Failed to store CpvPeds.root in DAQ FXS!\n");
179 for(int iDDL = 0; iDDL<2*AliPHOSCpvParam::kNDDL; iDDL++){
180 if(pedProducer -> CalcPedestal(iDDL)){
181 pedProducer -> WritePedFiles(iDDL);
182 for (int iCC = 0; iCC<AliPHOSCpvParam::kNRows; iCC++){
183 status=daqDA_DB_storeFile(Form("thr%d_%02d.dat", iDDL, iCC),Form("thr%d_%02d.dat", iDDL, iCC));
184 if(status) printf("Failed to store thr%d_%02d.dat in DAQ DB!\n",iDDL, iCC);
188 }else return 10;//error code 10 (not enough events!)
191 /* report progress */
192 daqDA_progressReport(100);