Subversion Repositories f9daq

Rev

Rev 262 | Rev 322 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 262 Rev 263
Line 20... Line 20...
20
//static int tfID;
20
//static int tfID;
21
int pfreq;
21
int pfreq;
22
static int plothandle[2]= {0,0};
22
static int plothandle[2]= {0,0};
23
static int tdcplothandle[2]= {0,0};
23
static int tdcplothandle[2]= {0,0};
24
static int adcplothandle[2]= {0,0};
24
static int adcplothandle[2]= {0,0};
25
static int excludefirst[2]= {0,0};
25
static int excludefirst[2]= {0,0};
26
int debug ;
26
int debug ;
27
int initialized = 0;
27
int initialized = 0;
28
#define MAX_THREADS 10
28
#define MAX_THREADS 10
29
int nsamples=0;
29
int nsamples=0;
30
int adctype;
30
int adctype;
31
float athreshold, twin0,twin1;
31
float athreshold, twin0,twin1;
32
float timebins[0XFFFF];
32
float timebins[0XFFFF];
-
 
33
float daqtime;
-
 
34
double starttime;
33
 
35
 
34
FILE *foutput;
36
FILE *foutput;
35
int outwaveforms=0;
37
int outwaveforms=0;
36
 
38
 
37
static CmtThreadPoolHandle poolHandle = 0;
39
static CmtThreadPoolHandle poolHandle = 0;
Line 54... Line 56...
54
  FILE *fp;
56
  FILE *fp;
55
 
57
 
56
  switch (type) {
58
  switch (type) {
57
    case 0:
59
    case 0:
58
    case 1:
60
    case 1:
59
      sprintf(filename,"%s_%d.root",fname, hid);
61
      sprintf(filename,"%s_%d.root",fname, hid);
60
      fp  =fopen(filename,"wb");
62
      fp  =fopen(filename,"wb");
61
      if (fp) {
63
      if (fp) {
62
        H1D_Write2File(hid,fp);
64
        H1D_Write2File(hid,fp);
63
        fclose(fp);
65
        fclose(fp);
64
        if (type) {
66
        if (type) {
Line 75... Line 77...
75
      if (fp) {
77
      if (fp) {
76
        for (int i=0; i<H1D_GetNbinsX(hid); i++) fprintf(fp,"%g\t%g\n", H1D_GetXBinCenter(hid,i), H1D_GetBinContent(hid,i) );
78
        for (int i=0; i<H1D_GetNbinsX(hid); i++) fprintf(fp,"%g\t%g\n", H1D_GetXBinCenter(hid,i), H1D_GetBinContent(hid,i) );
77
        fclose(fp);
79
        fclose(fp);
78
        printf("Histogram %d exported to %s\n", hid, filename);
80
        printf("Histogram %d exported to %s\n", hid, filename);
79
      }
81
      }
80
     
82
 
81
      break;
83
      break;
82
 
84
 
83
  }
85
  }
84
 
86
 
85
 
87
 
86
  return (0);
88
  return (0);
87
}
89
}
88
 
90
 
89
 
91
 
90
int main (int argc, char *argv[]) {
92
int main (int argc, char *argv[]) {
91
  if (InitCVIRTE (0, argv, 0) == 0)
93
  if (InitCVIRTE (0, argv, 0) == 0)
92
    return -1;  /* out of memory */
94
    return -1;  /* out of memory */
93
  if ((panelHandle = LoadPanel (0, "redpitaya_gui.uir", PANEL)) < 0)
95
  if ((panelHandle = LoadPanel (0, "redpitaya_gui.uir", PANEL)) < 0)
94
    return -1;
96
    return -1;
95
 
97
 
96
 
98
 
97
  SetStdioPort (CVI_STDIO_WINDOW);
99
  SetStdioPort (CVI_STDIO_WINDOW);
98
  SetSleepPolicy(VAL_SLEEP_MORE);
100
  SetSleepPolicy(VAL_SLEEP_MORE);
99
  CmtNewThreadPool (MAX_THREADS,  &poolHandle);
101
  CmtNewThreadPool (MAX_THREADS,  &poolHandle);
100
 
102
 
101
  //for (int i=0;i<1000;i++) H1D_Fill(1,i,i);
-
 
102
  //H1D_Draw(1,panelHandle,PANEL_ADC1,&adcplothandle[0]);
-
 
-
 
103
 
103
  printf("size of double = %d\n",sizeof(double));
104
  //printf("size of double = %d\n",sizeof(double));
104
  DisplayPanel (panelHandle);
105
  DisplayPanel (panelHandle);
105
  RunUserInterface ();
106
  RunUserInterface ();
106
  DiscardPanel (panelHandle);
107
  DiscardPanel (panelHandle);
107
  CmtDiscardThreadPool (poolHandle);
108
  CmtDiscardThreadPool (poolHandle);
108
  if (chandle!=0) DisconnectFromTCPServer (chandle);
109
  if (chandle!=0) DisconnectFromTCPServer (chandle);
Line 131... Line 132...
131
  return(ret);
132
  return(ret);
132
}
133
}
133
 
134
 
134
 
135
 
135
int CVICALLBACK SetGraphLogYCB (int panel, int control, int event,
136
int CVICALLBACK SetGraphLogYCB (int panel, int control, int event,
136
                                                                void *callbackData, int eventData1, int eventData2)
137
                                void *callbackData, int eventData1, int eventData2) {
137
{
138
 
138
       
-
 
139
        int cid=0;
139
  int cid=0;
140
        int logy=0;
140
  int logy=0;
141
        switch (event)
141
  switch (event) {
142
        {
-
 
143
                case EVENT_COMMIT:
142
    case EVENT_COMMIT:
144
                        GetCtrlVal(panel,control, &logy);
143
      GetCtrlVal(panel,control, &logy);
145
                        switch (control){
144
      switch (control) {
-
 
145
        case PANEL_LOGY_1:
146
                                case PANEL_LOGY_1: cid = PANEL_TDC1; break;
146
          cid = PANEL_TDC1;
-
 
147
          break;
-
 
148
        case PANEL_LOGY_2:
147
                                case PANEL_LOGY_2: cid = PANEL_ADC1; break;
149
          cid = PANEL_ADC1;
-
 
150
          break;
-
 
151
        case PANEL_LOGY_3:
148
                                case PANEL_LOGY_3: cid = PANEL_TDC2; break;
152
          cid = PANEL_TDC2;
-
 
153
          break;
-
 
154
        case PANEL_LOGY_4:
149
                                case PANEL_LOGY_4: cid = PANEL_ADC2; break;
155
          cid = PANEL_ADC2;
-
 
156
          break;
150
                        }
157
      }
151
                        if (logy) SetCtrlAttribute (panel, cid, ATTR_YMAP_MODE, VAL_LOG);
158
      if (logy) SetCtrlAttribute (panel, cid, ATTR_YMAP_MODE, VAL_LOG);
152
                        else      SetCtrlAttribute (panel, cid, ATTR_YMAP_MODE, VAL_LINEAR);
159
      else    SetCtrlAttribute (panel, cid, ATTR_YMAP_MODE, VAL_LINEAR);
153
                        break;
160
      break;
154
        }
161
  }
155
        return 0;
162
  return 0;
156
}
163
}
157
 
164
 
158
int CVICALLBACK SetGraphPropertiesCB (int panel, int control, int event,
165
int CVICALLBACK SetGraphPropertiesCB (int panel, int control, int event,
159
                                                                          void *callbackData, int eventData1, int eventData2)
166
                                      void *callbackData, int eventData1, int eventData2) {
160
{
-
 
161
 
167
 
162
        float min, max;
168
  float min, max;
163
        int autoscale;
169
  int autoscale;
164
        switch (event)
170
  switch (event) {
-
 
171
    case EVENT_COMMIT:
-
 
172
      GetCtrlVal(panelHandle,PANEL_MINX_5, &min);
-
 
173
      GetCtrlVal(panelHandle,PANEL_MAXX_5, &max);
-
 
174
      GetCtrlVal(panelHandle,PANEL_AUTOY, &autoscale);
-
 
175
      if (autoscale)
-
 
176
        SetAxisScalingMode (panelHandle, PANEL_GRAPH, VAL_LEFT_YAXIS, VAL_AUTOSCALE, min, max);
-
 
177
      else
-
 
178
        SetAxisScalingMode (panelHandle, PANEL_GRAPH, VAL_LEFT_YAXIS, VAL_MANUAL, min, max);
-
 
179
 
-
 
180
      GetCtrlVal(panelHandle,PANEL_MINX_6, &min);
-
 
181
      GetCtrlVal(panelHandle,PANEL_MAXX_6, &max);
-
 
182
      GetCtrlVal(panelHandle,PANEL_AUTOX, &autoscale);
-
 
183
      if (autoscale)
-
 
184
        SetAxisScalingMode (panelHandle, PANEL_GRAPH, VAL_BOTTOM_XAXIS, VAL_AUTOSCALE, min, max);
-
 
185
      else
-
 
186
        SetAxisScalingMode (panelHandle, PANEL_GRAPH, VAL_BOTTOM_XAXIS, VAL_MANUAL, min, max);
-
 
187
 
-
 
188
 
-
 
189
      GetCtrlVal(panelHandle,PANEL_MINX_7, &min);
-
 
190
      GetCtrlVal(panelHandle,PANEL_MAXX_7, &max);
-
 
191
      GetCtrlVal(panelHandle,PANEL_AUTOY_2, &autoscale);
-
 
192
      if (autoscale)
-
 
193
        SetAxisScalingMode (panelHandle, PANEL_TDC1, VAL_LEFT_YAXIS, VAL_AUTOSCALE, min, max);
-
 
194
      else
-
 
195
        SetAxisScalingMode (panelHandle, PANEL_TDC1, VAL_LEFT_YAXIS, VAL_MANUAL, min, max);
165
        {
196
 
-
 
197
      GetCtrlVal(panelHandle,PANEL_MINX_8, &min);
-
 
198
      GetCtrlVal(panelHandle,PANEL_MAXX_8, &max);
-
 
199
      GetCtrlVal(panelHandle,PANEL_AUTOY_3, &autoscale);
166
                case EVENT_COMMIT:
200
      if (autoscale)
-
 
201
        SetAxisScalingMode (panelHandle, PANEL_ADC1, VAL_LEFT_YAXIS, VAL_AUTOSCALE, min, max);
-
 
202
      else
-
 
203
        SetAxisScalingMode (panelHandle, PANEL_ADC1, VAL_LEFT_YAXIS, VAL_MANUAL, min, max);
-
 
204
 
167
                        GetCtrlVal(panelHandle,PANEL_MINX_5, &min);
205
      GetCtrlVal(panelHandle,PANEL_MINX_9, &min);
168
                        GetCtrlVal(panelHandle,PANEL_MAXX_5, &max);
206
      GetCtrlVal(panelHandle,PANEL_MAXX_9, &max);
-
 
207
      GetCtrlVal(panelHandle,PANEL_AUTOY_4, &autoscale);
-
 
208
      if (autoscale)
-
 
209
        SetAxisScalingMode (panelHandle, PANEL_TDC2, VAL_LEFT_YAXIS, VAL_AUTOSCALE, min, max);
-
 
210
      else
-
 
211
        SetAxisScalingMode (panelHandle, PANEL_TDC2, VAL_LEFT_YAXIS, VAL_MANUAL, min, max);
-
 
212
 
-
 
213
      GetCtrlVal(panelHandle,PANEL_MINX_10, &min);
-
 
214
      GetCtrlVal(panelHandle,PANEL_MAXX_10, &max);
169
                        GetCtrlVal(panelHandle,PANEL_AUTOY, &autoscale);
215
      GetCtrlVal(panelHandle,PANEL_AUTOY_5, &autoscale);
170
                        if (autoscale)
216
      if (autoscale)
171
                                SetAxisScalingMode (panelHandle, PANEL_GRAPH, VAL_LEFT_YAXIS, VAL_AUTOSCALE, min, max);
217
        SetAxisScalingMode (panelHandle, PANEL_ADC2, VAL_LEFT_YAXIS, VAL_AUTOSCALE, min, max);
172
                        else
218
      else
173
                                SetAxisScalingMode (panelHandle, PANEL_GRAPH, VAL_LEFT_YAXIS, VAL_MANUAL, min, max);
219
        SetAxisScalingMode (panelHandle, PANEL_ADC2, VAL_LEFT_YAXIS, VAL_MANUAL, min, max);
-
 
220
 
174
 
221
 
175
                        GetCtrlVal(panelHandle,PANEL_MINX_6, &min);
-
 
176
                        GetCtrlVal(panelHandle,PANEL_MAXX_6, &max);
-
 
177
                        GetCtrlVal(panelHandle,PANEL_AUTOX, &autoscale);
-
 
178
                        if (autoscale)
-
 
179
                                SetAxisScalingMode (panelHandle, PANEL_GRAPH, VAL_BOTTOM_XAXIS, VAL_AUTOSCALE, min, max);
-
 
180
                        else
-
 
181
                                SetAxisScalingMode (panelHandle, PANEL_GRAPH, VAL_BOTTOM_XAXIS, VAL_MANUAL, min, max);
-
 
182
                       
-
 
183
                       
-
 
184
                        GetCtrlVal(panelHandle,PANEL_MINX_7, &min);
-
 
185
                        GetCtrlVal(panelHandle,PANEL_MAXX_7, &max);
-
 
186
                        GetCtrlVal(panelHandle,PANEL_AUTOY_2, &autoscale);
-
 
187
                        if (autoscale)
-
 
188
                                SetAxisScalingMode (panelHandle, PANEL_TDC1, VAL_LEFT_YAXIS, VAL_AUTOSCALE, min, max);
-
 
189
                        else
-
 
190
                                SetAxisScalingMode (panelHandle, PANEL_TDC1, VAL_LEFT_YAXIS, VAL_MANUAL, min, max);
-
 
191
                       
-
 
192
                        GetCtrlVal(panelHandle,PANEL_MINX_8, &min);
-
 
193
                        GetCtrlVal(panelHandle,PANEL_MAXX_8, &max);
-
 
194
                        GetCtrlVal(panelHandle,PANEL_AUTOY_3, &autoscale);
-
 
195
                        if (autoscale)
-
 
196
                                SetAxisScalingMode (panelHandle, PANEL_ADC1, VAL_LEFT_YAXIS, VAL_AUTOSCALE, min, max);
-
 
197
                        else
-
 
198
                                SetAxisScalingMode (panelHandle, PANEL_ADC1, VAL_LEFT_YAXIS, VAL_MANUAL, min, max);
-
 
199
                       
-
 
200
                        GetCtrlVal(panelHandle,PANEL_MINX_9, &min);
-
 
201
                        GetCtrlVal(panelHandle,PANEL_MAXX_9, &max);
-
 
202
                        GetCtrlVal(panelHandle,PANEL_AUTOY_4, &autoscale);
-
 
203
                        if (autoscale)
-
 
204
                                SetAxisScalingMode (panelHandle, PANEL_TDC2, VAL_LEFT_YAXIS, VAL_AUTOSCALE, min, max);
-
 
205
                        else
-
 
206
                                SetAxisScalingMode (panelHandle, PANEL_TDC2, VAL_LEFT_YAXIS, VAL_MANUAL, min, max);
-
 
207
 
222
 
208
                        GetCtrlVal(panelHandle,PANEL_MINX_10, &min);
-
 
209
                        GetCtrlVal(panelHandle,PANEL_MAXX_10, &max);
-
 
210
                        GetCtrlVal(panelHandle,PANEL_AUTOY_5, &autoscale);
-
 
211
                        if (autoscale)
-
 
212
                                SetAxisScalingMode (panelHandle, PANEL_ADC2, VAL_LEFT_YAXIS, VAL_AUTOSCALE, min, max);
-
 
213
                        else
-
 
214
                                SetAxisScalingMode (panelHandle, PANEL_ADC2, VAL_LEFT_YAXIS, VAL_MANUAL, min, max);
-
 
215
 
-
 
216
                       
-
 
217
 
-
 
218
                        break;
223
      break;
219
        }
224
  }
220
        return 0;
225
  return 0;
221
}
226
}
222
 
227
 
223
 
228
 
224
int histoinit() {
229
int histoinit() {
225
  int nch;
230
  int nch;
Line 264... Line 269...
264
 
269
 
265
  SetCtrlAttribute  (panelHandle, PANEL_TDC1, ATTR_XNAME, H1D_GetTitleX(3) );
270
  SetCtrlAttribute  (panelHandle, PANEL_TDC1, ATTR_XNAME, H1D_GetTitleX(3) );
266
  SetCtrlAttribute  (panelHandle, PANEL_TDC1, ATTR_YNAME, H1D_GetTitleY(3) );
271
  SetCtrlAttribute  (panelHandle, PANEL_TDC1, ATTR_YNAME, H1D_GetTitleY(3) );
267
  SetCtrlAttribute  (panelHandle, PANEL_TDC2, ATTR_XNAME, H1D_GetTitleX(4) );
272
  SetCtrlAttribute  (panelHandle, PANEL_TDC2, ATTR_XNAME, H1D_GetTitleX(4) );
268
  SetCtrlAttribute  (panelHandle, PANEL_TDC2, ATTR_YNAME, H1D_GetTitleY(4) );
273
  SetCtrlAttribute  (panelHandle, PANEL_TDC2, ATTR_YNAME, H1D_GetTitleY(4) );
269
  SetGraphLogYCB( panelHandle, PANEL_LOGY_1,  EVENT_COMMIT,NULL,0,0);
274
  SetGraphLogYCB( panelHandle, PANEL_LOGY_1,  EVENT_COMMIT,NULL,0,0);
270
  SetGraphLogYCB( panelHandle, PANEL_LOGY_2,  EVENT_COMMIT,NULL,0,0);
275
  SetGraphLogYCB( panelHandle, PANEL_LOGY_2,  EVENT_COMMIT,NULL,0,0);
271
  SetGraphLogYCB( panelHandle, PANEL_LOGY_3,  EVENT_COMMIT,NULL,0,0);
276
  SetGraphLogYCB( panelHandle, PANEL_LOGY_3,  EVENT_COMMIT,NULL,0,0);
272
  SetGraphLogYCB( panelHandle, PANEL_LOGY_4,  EVENT_COMMIT,NULL,0,0);
277
  SetGraphLogYCB( panelHandle, PANEL_LOGY_4,  EVENT_COMMIT,NULL,0,0);
273
 
278
 
274
  SetGraphPropertiesCB( panelHandle, PANEL, EVENT_COMMIT,NULL,0,0);
279
  SetGraphPropertiesCB( panelHandle, PANEL, EVENT_COMMIT,NULL,0,0);
275
 
280
 
276
  SetCtrlAttribute  (panelHandle, PANEL_GRAPH, ATTR_LABEL_TEXT , "sampling adc data");
281
  SetCtrlAttribute  (panelHandle, PANEL_GRAPH, ATTR_LABEL_TEXT , "sampling adc data");
277
  SetCtrlAttribute  (panelHandle, PANEL_GRAPH, ATTR_XNAME, "t(us)" );
282
  SetCtrlAttribute  (panelHandle, PANEL_GRAPH, ATTR_XNAME, "t(us)" );
278
  SetCtrlAttribute  (panelHandle, PANEL_GRAPH, ATTR_YNAME, "U(V)" );
283
  SetCtrlAttribute  (panelHandle, PANEL_GRAPH, ATTR_YNAME, "U(V)" );
279
 
284
 
280
  GetCtrlVal(panelHandle,PANEL_TWIN0, &twin0);
285
  GetCtrlVal(panelHandle,PANEL_TWIN0, &twin0);
281
  GetCtrlVal(panelHandle,PANEL_TWIN1, &twin1);
286
  GetCtrlVal(panelHandle,PANEL_TWIN1, &twin1);
282
  GetCtrlVal(panelHandle,PANEL_ADCTYPE, &adctype);
287
  GetCtrlVal(panelHandle,PANEL_ADCTYPE, &adctype);
283
  GetCtrlVal(panelHandle,PANEL_ITRGLEVEL  , &athreshold);
288
  GetCtrlVal(panelHandle,PANEL_ITRGLEVEL  , &athreshold);
284
  return 0;
289
  return 0;
285
}
290
}
286
 
291
 
287
int analyse(int nb, unsigned char *cdata, int *info, int *ninfo) {
292
int analyse(int nb, unsigned char *cdata, int *info, int *ninfo) {
288
 
293
 
Line 294... Line 299...
294
  int nr=0;
299
  int nr=0;
295
  static float adc = 10000;
300
  static float adc = 10000;
296
  static float qdc = 0;
301
  static float qdc = 0;
297
  *ninfo = 0;
302
  *ninfo = 0;
298
  printf("Run HDR LEN=%d NEVE=%d dt=%f adc=%f qdc=%f\n", ibuf[0],ibuf[1],fbuf[2],adc,qdc);
303
  printf("Run HDR LEN=%d NEVE=%d dt=%f adc=%f qdc=%f\n", ibuf[0],ibuf[1],fbuf[2],adc,qdc);
-
 
304
  daqtime += fbuf[2];
-
 
305
 
-
 
306
  SetCtrlVal(panelHandle, PANEL_CDAQTIME,daqtime);
-
 
307
  SetCtrlVal(panelHandle, PANEL_CTIME, Timer() -starttime);
-
 
308
  daqtime  =0;
299
  while (nr<nb) {
309
  while (nr<nb) {
300
 
310
 
301
    int recid   = *data++;
311
    int recid   = *data++;
302
    int chmask  = *data++;
312
    int chmask  = *data++;
303
    nr +=8;
313
    nr +=8;
Line 315... Line 325...
315
 
325
 
316
      int nsamples = *(data++);
326
      int nsamples = *(data++);
317
      if (nsamples<=0 || nsamples>16*1024) {
327
      if (nsamples<=0 || nsamples>16*1024) {
318
        printf("Error nsamples %d\n", nsamples);
328
        printf("Error nsamples %d\n", nsamples);
319
        return -1;
329
        return -1;
320
      }
330
      }
321
      float *fdata = (float *) data;
331
      float *fdata = (float *) data;
322
      if ( nsamples>0  && neve % pfreq == 0) {
332
      if ( nsamples>0  && neve % pfreq == 0) {
323
        const int col[4]= {VAL_RED,VAL_GREEN,VAL_BLUE,VAL_WHITE};
333
        const int col[4]= {VAL_RED,VAL_GREEN,VAL_BLUE,VAL_WHITE};
324
        if (plothandle[id]) DeleteGraphPlot (panelHandle, PANEL_GRAPH, plothandle[id], VAL_IMMEDIATE_DRAW);
334
        if (plothandle[id]) DeleteGraphPlot (panelHandle, PANEL_GRAPH, plothandle[id], VAL_IMMEDIATE_DRAW);
325
 
335
 
326
        plothandle[id] = PlotXY (panelHandle, PANEL_GRAPH, timebins, fdata, nsamples, VAL_FLOAT, VAL_FLOAT, VAL_FAT_LINE, VAL_NO_POINT, VAL_SOLID, 1, col[id]);
336
        plothandle[id] = PlotXY (panelHandle, PANEL_GRAPH, timebins, fdata, nsamples, VAL_FLOAT, VAL_FLOAT, VAL_FAT_LINE, VAL_NO_POINT, VAL_SOLID, 1, col[id]);
327
 
337
 
328
        H1D_Draw(1,panelHandle,PANEL_ADC1,&adcplothandle[0]);
338
        H1D_Draw(1,panelHandle,PANEL_ADC1,&adcplothandle[0]);
329
        H1D_Draw(2,panelHandle,PANEL_ADC2,&adcplothandle[1]);
339
        H1D_Draw(2,panelHandle,PANEL_ADC2,&adcplothandle[1]);
330
        H1D_Draw(3,panelHandle,PANEL_TDC1,&tdcplothandle[0]);
340
        H1D_Draw(3,panelHandle,PANEL_TDC1,&tdcplothandle[0]);
331
        H1D_Draw(4,panelHandle,PANEL_TDC2,&tdcplothandle[1]);
341
        H1D_Draw(4,panelHandle,PANEL_TDC2,&tdcplothandle[1]);
332
 
342
 
333
        if (debug) for (int k=0; k<10; k++) printf("%d %d (%f , %d)\n", id,k, timebins[k],data[k]);
343
        if (debug) for (int k=0; k<10; k++) printf("%d %d (%f , %d)\n", id,k, timebins[k],data[k]);
334
      }
344
      }
335
 
345
 
336
      nr+=8;
346
      nr+=8;
337
      adc=10000;
347
      adc=10000;
338
      qdc=0;
348
      qdc=0;
339
      int nqdc=0;
349
      int nqdc=0;
340
          int ntdc=0;
350
      int ntdc=0;
341
      for (int k=1; k<nsamples; k++) {
351
      for (int k=1; k<nsamples; k++) {
342
        float t =timebins[k];
352
        float t =timebins[k];
343
        float tp=timebins[k-1];
353
        float tp=timebins[k-1];
344
        if (fdata[k] < adc) adc = fdata[k];
354
        if (fdata[k] < adc) adc = fdata[k];
345
        if (t>twin0 && t<twin1 ) {
355
        if (t>twin0 && t<twin1 ) {
346
          nqdc++;
356
          nqdc++;
347
          qdc+=fdata[k];
357
          qdc+=fdata[k];
348
        }  
358
        }
349
        if (fdata[k]< athreshold && fdata[k-1]> athreshold) {
359
        if (fdata[k]< athreshold && fdata[k-1]> athreshold) {
350
          double t0= tp+(athreshold-fdata[k-1])/(fdata[k]-fdata[k-1])* (t-tp);
360
          double t0= tp+(athreshold-fdata[k-1])/(fdata[k]-fdata[k-1])* (t-tp);
351
          if (ntdc>0) H1D_Fill(3+id, t0,1);
361
          if (ntdc>0) H1D_Fill(3+id, t0,1);
352
          if (ntdc==0 && !excludefirst[id]) H1D_Fill(3+id, t0,1);
362
          if (ntdc==0 && !excludefirst[id]) H1D_Fill(3+id, t0,1);
353
                  finfo[*ninfo+4+ntdc]=t0;
363
          finfo[*ninfo+4+ntdc]=t0;
354
                  ntdc++;
364
          ntdc++;
355
        }
365
        }
356
      }
366
      }
357
      if (nqdc) qdc/=nqdc;
367
      if (nqdc) qdc/=nqdc;
358
      //printf("adc %f qdc %f\n", adc,qdc);
368
      //printf("adc %f qdc %f\n", adc,qdc);
359
          info[*ninfo]=(ntdc+4)*sizeof(int); // len
369
      info[*ninfo]=(ntdc+4)*sizeof(int); // len
360
          info[*ninfo+1]=id | 0xF0000000;    // recid
370
      info[*ninfo+1]=id | 0xF0000000;    // recid
361
          finfo[*ninfo+2]=adc;
371
      finfo[*ninfo+2]=adc;
362
          finfo[*ninfo+3]=qdc;
372
      finfo[*ninfo+3]=qdc;
363
          *ninfo+= ntdc+4;
373
      *ninfo+= ntdc+4;
364
         
374
 
365
      if (adctype)
375
      if (adctype)
366
        H1D_Fill(1+id, -adc,1);
376
        H1D_Fill(1+id, -adc,1);
367
      else
377
      else
368
        H1D_Fill(1+id, -qdc,1);
378
        H1D_Fill(1+id, -qdc,1);
369
     
379
 
370
      nr+=4*nsamples;
380
      nr+=4*nsamples;
371
      data+=nsamples;
381
      data+=nsamples;
372
    }
382
    }
373
    recid      = *data++;
383
    recid      = *data++;
374
    int event  = *data++;
384
    int event  = *data++;
Line 412... Line 422...
412
        if (retval<1) break;
422
        if (retval<1) break;
413
        nb += retval;
423
        nb += retval;
414
      }
424
      }
415
      if (debug) printf("Received RECID %d HDRLEN %d == read %d\n", hdr[0], size, nb);
425
      if (debug) printf("Received RECID %d HDRLEN %d == read %d\n", hdr[0], size, nb);
416
 
426
 
417
          int ninfo=0;
427
      int ninfo=0;
418
      switch (hdr[0]) {
428
      switch (hdr[0]) {
419
        case 0:
429
        case 0:
420
          data[nb]=0;
430
          data[nb]=0;
421
          printf("%s\n",data);
431
          printf("%s\n",data);
422
          break;
432
          break;
423
        case 1:// read
433
        case 1:// read
424
 
434
 
425
          GetCtrlVal(panelHandle,PANEL_CEVE     , &event);
435
          GetCtrlVal(panelHandle,PANEL_CEVE     , &event);
426
          GetCtrlVal(panelHandle,PANEL_NTOTAL   , &ncalls);
436
          GetCtrlVal(panelHandle,PANEL_NTOTAL   , &ncalls);
427
                 
437
 
428
          event += analyse(nb,data, evinfo, &ninfo);
438
          event += analyse(nb,data, evinfo, &ninfo);
429
          if (foutput) {
439
          if (foutput) {
430
                        if (outwaveforms) fwrite(data, 1, nb, foutput);
440
            if (outwaveforms) fwrite(data, 1, nb, foutput);
431
                        fwrite(evinfo, 1, ninfo*sizeof(int), foutput);
441
            fwrite(evinfo, 1, ninfo*sizeof(int), foutput);
432
                        time(&t1);
442
            time(&t1);
433
                        if ((t1-t0)>10000) {
443
            if ((t1-t0)>10000) {
434
                           for (int i=0;i<4;i++) H1D_Write2File(1+i,foutput);
444
              for (int i=0; i<4; i++) H1D_Write2File(1+i,foutput);
435
                           
445
 
436
                           time(&t0);
446
              time(&t0);
437
                        }      
447
            }
438
                  }
448
          }
439
          SetCtrlVal(panelHandle,PANEL_CEVE     , event);
449
          SetCtrlVal(panelHandle,PANEL_CEVE     , event);
440
          if (event>=ncalls) StartCB (panelHandle, PANEL_START, EVENT_COMMIT, NULL,1,0);
450
          if (event>=ncalls) StartCB (panelHandle, PANEL_START, EVENT_COMMIT, NULL,1,0);
441
 
451
 
442
          break;
452
          break;
443
        default:
453
        default:
444
          printf("Unknown command = %d\n", hdr[0]);
454
          printf("Unknown command = %d\n", hdr[0]);
445
          break;
455
          break;
446
      }
456
      }
447
      break;
457
      break;
448
 
458
 
449
    }
459
    }
450
  }
460
  }
451
  return 0;
461
  return 0;
452
}
462
}
453
 
463
 
454
int rpdecimation(int i){
464
int rpdecimation(int i) {
455
 
465
 
456
        switch (i){
466
  switch (i) {
-
 
467
    case 1:
457
                case 1: return 0;
468
      return 0;
-
 
469
    case 8:
458
                case 8: return 1;
470
      return 1;
-
 
471
    case 64:
459
                case 64: return 2;
472
      return 2;
-
 
473
    case 1024:
460
                case 1024: return 3;
474
      return 3;
-
 
475
    case 8192:
461
                case 8192: return 4;
476
      return 4;
-
 
477
    case 65536:
462
                case 65536: return 5;
478
      return 5;
463
        }
479
  }
464
        return 0;
480
  return 0;
465
 
481
 
466
}
482
}
467
 
483
 
468
int CVICALLBACK StartCB (int panel, int control, int event,
484
int CVICALLBACK StartCB (int panel, int control, int event,
469
                         void *callbackData, int eventData1, int eventData2) {
485
                         void *callbackData, int eventData1, int eventData2) {
Line 492... Line 508...
492
      GetCtrlVal(panel,PANEL_CH1    , &imask[1]  );
508
      GetCtrlVal(panel,PANEL_CH1    , &imask[1]  );
493
      GetCtrlVal(panel,PANEL_PFREQ  , &pfreq);
509
      GetCtrlVal(panel,PANEL_PFREQ  , &pfreq);
494
      GetCtrlVal(panel,PANEL_DEBUG  , &debug);
510
      GetCtrlVal(panel,PANEL_DEBUG  , &debug);
495
      GetCtrlVal(panel,PANEL_NBEFORE  , &nbefore);
511
      GetCtrlVal(panel,PANEL_NBEFORE  , &nbefore);
496
      GetCtrlVal(panel,PANEL_ENABLEDOUTPUT, &output);
512
      GetCtrlVal(panel,PANEL_ENABLEDOUTPUT, &output);
497
            GetCtrlVal(panel,PANEL_OUTWAVE, &outwaveforms);  
513
      GetCtrlVal(panel,PANEL_OUTWAVE, &outwaveforms);
498
      GetCtrlVal(panel,PANEL_FILENAME, filename);
514
      GetCtrlVal(panel,PANEL_FILENAME, filename);
499
 
515
 
500
      delay= MINTRGDELAY + nsamples - nbefore + 1;
516
      delay= MINTRGDELAY + nsamples - nbefore + 1;
501
 
517
 
502
      mask = 0;
518
      mask = 0;
Line 504... Line 520...
504
        if (imask[i]) mask |= (1<<i);
520
        if (imask[i]) mask |= (1<<i);
505
      }
521
      }
506
 
522
 
507
      double level =0;
523
      double level =0;
508
      GetCtrlVal(panel,PANEL_TRGLEVEL , &level);
524
      GetCtrlVal(panel,PANEL_TRGLEVEL , &level);
509
     
525
 
510
 
526
 
511
      switch (control) {
527
      switch (control) {
512
        case PANEL_CONNECT: {
528
        case PANEL_CONNECT: {
513
          int state;
529
          int state;
514
          GetCtrlVal(panel,PANEL_CONNECT, &state);
530
          GetCtrlVal(panel,PANEL_CONNECT, &state);
Line 521... Line 537...
521
        }
537
        }
522
        break;
538
        break;
523
        case PANEL_START: {
539
        case PANEL_START: {
524
          int state;
540
          int state;
525
          GetCtrlVal(panel,PANEL_START, &state);
541
          GetCtrlVal(panel,PANEL_START, &state);
526
          GetCtrlVal(panel,PANEL_EXCLUDE_1, &excludefirst[0]);  
542
          GetCtrlVal(panel,PANEL_EXCLUDE_1, &excludefirst[0]);
527
          GetCtrlVal(panel,PANEL_EXCLUDE_2, &excludefirst[1]);
543
          GetCtrlVal(panel,PANEL_EXCLUDE_2, &excludefirst[1]);
528
          if (state && eventData1==0) {
544
          if (state && eventData1==0) {
529
            histoinit();
545
            histoinit();
-
 
546
            starttime=Timer();
-
 
547
            daqtime  =0;
530
                                                /* decimation n (=1,8,64...) : frequency = 125/n MHz*/
548
            /* decimation n (=1,8,64...) : frequency = 125/n MHz*/
531
            for (int i=0; i<nsamples; i++) timebins[i]=(i-nbefore)* (float)decimation /125.;
549
            for (int i=0; i<nsamples; i++) timebins[i]=(i-nbefore)* (float)decimation /125.;
532
            if (output) foutput = fopen(filename, "wb");
550
            if (output) foutput = fopen(filename, "wb");
533
                                                printf("decimation %d\n", decimation);
551
            printf("decimation %d\n", decimation);
534
            SetCtrlVal(panel,PANEL_CEVE  , 0);
552
            SetCtrlVal(panel,PANEL_CEVE  , 0);
535
            ctrl_c=0;
553
            ctrl_c=0;
536
            hdr[0] = 0;
554
            hdr[0] = 0;
537
            hdr[1] = 7*sizeof(int);
555
            hdr[1] = 7*sizeof(int);
538
            hdr[2] = delay;
556
            hdr[2] = delay;
Line 546... Line 564...
546
            ClientTCPWrite(chandle,&hdr[0],hdr[1],5000);  // acquire
564
            ClientTCPWrite(chandle,&hdr[0],hdr[1],5000);  // acquire
547
          } else {
565
          } else {
548
            hdr[0] = 1;
566
            hdr[0] = 1;
549
            hdr[1] = 2*sizeof(int);
567
            hdr[1] = 2*sizeof(int);
550
            ClientTCPWrite(chandle,&hdr[0],hdr[1],5000);  // stop the transfer
568
            ClientTCPWrite(chandle,&hdr[0],hdr[1],5000);  // stop the transfer
551
                                                printf("INFO Stopping the acquisition\n");
569
            printf("INFO Stopping the acquisition\n");
552
                                                SetCtrlVal(panel,PANEL_START, 0);
570
            SetCtrlVal(panel,PANEL_START, 0);
553
            if (foutput) fclose(foutput);
571
            if (foutput) fclose(foutput);
554
            foutput=NULL;
572
            foutput=NULL;
555
          }
573
          }
556
          break;
574
          break;
557
        }
575
        }