1 /*********************************************************************************
2 - Contact: Brigitte Cheynis b.cheynis@ipnl.in2p3.fr
5 - Reference run number :
6 - Run Type: CHANNEL_DELAY_TUNING
8 - Number of events needed: 500
9 - Input Files: argument list
10 - Output Files: local file V0_ChannelDelayTuning.dat
11 FXS file V0_ChannelDelayTuning.dat
12 - Trigger types used: PHYSICS_EVENT
13 **********************************************************************************/
16 /**********************************************************************************
18 * VZERO Detector Algorithm used for tuning FEE parameters *
20 * This program reads data on the LDC *
21 * It cumulates fBB and fBG flags, populates local "./V0_ChannelDelayTuning.dat" *
22 * file, exports it to the FES, and stores it to DAQ DB *
23 * We have 128 channels instead of 64 as expected for V0 due to the two sets of *
24 * charge integrators which are used by the FEE ... *
25 * The program reports about its processing progress. *
27 ***********************************************************************************/
35 #include <AliVZERORawStream.h>
36 #include <AliRawReaderDate.h>
37 #include <AliRawReader.h>
46 #include "TPluginManager.h"
52 /* Main routine --- Arguments: list of DATE raw data files */
54 int main(int argc, char **argv) {
56 /* magic line from Cvetan */
57 gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo",
63 status = daqDA_DB_getFile("V00da_results","./V0_Pedestals.dat");
65 printf("Failed to get Pedestal file (V0_Pedestals.dat) from DAQ DB, status=%d\n", status);
69 Float_t MeanPed[128], SigPed[128], fdump;
71 /* open the pedestal file and retrieve pedestal mean and sigma */
72 FILE *fpPed = fopen("V0_Pedestals.dat","r");
73 for(int i=0;i<128;i++){
74 fscanf(fpPed,"%f %f %f %f \n",&MeanPed[i],&SigPed[i],&fdump,&fdump);
75 // printf("%.3f %.3f \n",MeanPed[i],SigPed[i]);
79 //______________________________________________________________________________
80 // Get running parameters from V00_ChannelDelayTuning_DA.config file
82 Int_t kNbEventSkipped; // = 100; number of events skipped - to be tuned
83 Float_t kSigmaCut; // = 3.0; number of sigmas for threshold cut - to be tuned
85 status = daqDA_DB_getFile("V00_ChannelDelayTuning_DA.config","./V00_ChannelDelayTuning_DA.config");
87 printf("Failed to get config file (V00_ChannelDelayTuning_DA.config) from DAQ DB, status=%d\n", status);
90 /* open the config file and retrieve running parameters */
91 FILE *fpConfig = fopen("V00_ChannelDelayTuning_DA.config","r");
92 fscanf(fpConfig,"%f %d",&kSigmaCut,&kNbEventSkipped);
95 printf("Number of events skipped = %d ; Number of sigmas for threshold cut = %f\n",kNbEventSkipped,kSigmaCut);
96 //______________________________________________________________________________
101 Bool_t Integrator = 0;
103 for(Int_t i=0; i<64; i++) {
109 /* log start of process */
110 printf("VZERO DA program started - Channel Delay Tuning \n");
112 /* check that we got some arguments */
114 printf("Wrong number of arguments\n");
117 /* open result file to be exported to FES */
119 fp=fopen("./V0_ChannelDelayTuning.dat","a");
121 printf("Failed to open result file\n");
124 /* open log file to inform user */
126 flog=fopen("./V00log.txt","w");
128 printf("Failed to open log file\n");
131 /* report progress */
132 daqDA_progressReport(10);
134 /* init counters on events */
135 int nevents_physics=0;
138 sscanf(argv[1],"%d",&iteration);
140 /* read the n data files */
141 for (int n=2; n<argc; n++) {
144 status=monitorSetDataSource( argv[n] );
146 printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
149 /* report progress */
150 daqDA_progressReport(10+50*n/argc);
152 /* read the data file */
154 struct eventHeaderStruct *event;
155 eventTypeType eventT;
158 status=monitorGetEventDynamic((void **)&event);
159 if (status==MON_ERR_EOF) break; /* end of monitoring file has been reached */
161 printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
164 /* retry if got no event */
165 if (event==NULL) break;
168 eventT=event->eventType;
170 switch (event->eventType){
173 printf("START Of Run detected\n");
177 printf("END Of Run detected\n");
183 AliRawReader *rawReader = new AliRawReaderDate((void*)event);
185 AliVZERORawStream* rawStream = new AliVZERORawStream(rawReader);
187 if(nevents_physics > kNbEventSkipped){
188 for(Int_t i=0; i<64; i++) {
189 //ChargeEoI= rawStream->GetADC(i); takes EoI as central clock
190 // Look for the maximum in the LHC clock train instead of central clock 10
193 for(size_t iEvent=0; iEvent<21; iEvent++){
194 if(rawStream->GetPedestal(i,iEvent)>ChargeEoI)
195 {ChargeEoI= rawStream->GetPedestal(i,iEvent);
198 Integrator = rawStream->GetIntegratorFlag(i,iClock);
199 Float_t Threshold = MeanPed[i + 64 * Integrator] + kSigmaCut * SigPed[i + 64 * Integrator];
201 if((float)ChargeEoI>Threshold) {
203 if(rawStream->GetBBFlag(i,iClock)) BBFlag[i]+=1;
204 if(rawStream->GetBGFlag(i,iClock)) BGFlag[i]+=1;
212 } // end of switch on event type
218 } // end of loop over events
219 } // end of loop over data files
221 //________________________________________________________________________
222 // Computes mean values, dumps them into the output text file
224 for(Int_t i=0; i<64; i++) {
226 fBB = (float)BBFlag[i]/(float)NHit[i];
227 fBG = (float)BGFlag[i]/(float)NHit[i];
231 fprintf(fp," %d %d %f %f\n",iteration,i,fBB,fBG);
232 fprintf(flog," it %d ch %d BB %f BG %f BBFlag %d BGFlag %d Hit %d\n",iteration,i,fBB,fBG,BBFlag[i],BGFlag[i],NHit[i]);
235 //________________________________________________________________________
238 fprintf(flog,"Run #%s, received %d physics events out of %d\n",getenv("DATE_RUN_NUMBER"),nevents_physics,nevents_total);
239 printf("Run #%s, received %d physics events out of %d\n",getenv("DATE_RUN_NUMBER"),nevents_physics,nevents_total);
241 /* close result and log files */
245 /* report progress */
246 daqDA_progressReport(90);
248 /* export result file to FES */
249 status=daqDA_FES_storeFile("./V0_ChannelDelayTuning.dat","V00da_ChannelDelayTuning");
251 printf("Failed to export file : %d\n",status);
254 /* store result file on Online DB */
255 // status=daqDA_DB_storeFile("./V0_ChannelDelayTuning.dat","V00da_ChannelDelayTuning");
257 // printf("Failed to store file into Online DB: %d\n",status);
260 /* report progress */
261 daqDA_progressReport(100);