Subversion Repositories f9daq

Rev

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

Rev 33 Rev 34
Line 11... Line 11...
11
#  endif
11
#  endif
12
#  ifdef WIENVME
12
#  ifdef WIENVME
13
#    include "wienvme_dll.h"
13
#    include "wienvme_dll.h"
14
#  endif
14
#  endif
15
# include "CAENV673A.h" 
15
# include "CAENV673A.h" 
16
# include "CAENV462.h" 
16
# include "CAENV462.h"
-
 
17
 
17
#endif
18
#endif
18
 
19
 
19
#ifdef USE_MIKRO
20
#ifdef USE_MIKRO
20
#  include "MIKRO.h"
21
#  include "MIKRO.h"
21
#endif
22
#endif
22
 
23
 
23
#include <userint.h>
24
#include <userint.h>
24
#include <ansi_c.h>
25
#include <ansi_c.h>
25
#include <utility.h>
26
#include <utility.h>
26
#include <analysis.h>
27
#include <analysis.h>
27
 
28
 
28
#include "c:\HOME\dino\sipmScan\include\sipmBias_ui.h"
29
#include "c:\HOME\dino\sipmScan\include\sipmBias_ui.h"
29
 
30
 
30
#ifdef USE_DAQ
31
#ifdef USE_DAQ
31
#  define USE_CAMAC
32
#  define USE_CAMAC
32
#  include "camac.h"
33
#  include "camac.h"
-
 
34
#  define NDAC 1 // CAEN C221
-
 
35
#    define ASD8 0 // channels
-
 
36
#    define AMPDISSH 1
33
#  define NDAC 1
37
#    define SIPM 2
34
 
-
 
35
#  define CAEN_V673A   0x22220000 // IJS
38
#  define CAEN_V673A   0x22220000 // IJS
36
//#define CAEN_V673A   0x10110000 // FMF
39
//#define CAEN_V673A   0x10110000 // FMF
37
#  define CAEN_V462    0x100300
40
#  define CAEN_V462    0x100300
38
#endif
41
#endif
39
 
42
 
Line 51... Line 54...
51
#define MAX_THREADS 10
54
#define MAX_THREADS 10
52
 
55
 
53
#define IWAIT 200
56
#define IWAIT 200
54
 
57
 
55
#define NCH 64
58
#define NCH 64
-
 
59
#define POWERSUPPLY 66 // Power supply voltage for SiPM bias
56
 
60
 
57
static int p1h, pID, rID, tfID;
61
static int p1h, pID, rID, tfID;
58
static int ph_tdc, ph_adc;
62
static int ph_tdc, ph_adc;
59
static int dtdc[NCH][2][MAXCH];
63
static int dtdc[NCH][2][MAXCH];
60
static int something[NCH][2][MAXCH];
64
static int something[NCH][2][MAXCH];
Line 136... Line 140...
136
  int ntrig;  
140
  int ntrig;  
137
  int chip, len;
141
  int chip, len;
138
  unsigned long *pdata;
142
  unsigned long *pdata;
139
 
143
 
140
  FILE *fp;
144
  FILE *fp;
141
  #define RUNREC_ID 1
145
  #define  RUNREC_ID 1
142
  #define ENDREC_ID 2
146
  #define  ENDREC_ID 2
143
  #define POSREC_ID 3
147
  #define  POSREC_ID 3
144
  #define EVTREC_ID 4
148
  #define  EVTREC_ID 4
145
  #define THRREC_ID 5
149
  #define  THRREC_ID 5
-
 
150
  #define BIASREC_ID 6
146
 
151
 
147
  typedef struct {
152
  typedef struct {
148
    unsigned long id,len;
153
    unsigned long id,len;
149
    unsigned long fver,time;
154
    unsigned long fver,time;
-
 
155
    unsigned long thLow, thUp, thStep;
-
 
156
    unsigned long biasLow, biasUp, biasStep;
150
    unsigned long nev,nch,ped,xy;
157
    unsigned long nev,nch,ped,xy;
151
    long nx,x0,dx,ny,y0,dy;
158
    long nx,x0,dx,ny,y0,dy;
152
    } RUNREC;
159
    } RUNREC;
153
        RUNREC runrec;
160
        RUNREC runrec;
154
       
161
       
Line 173... Line 180...
173
        EVTREC evtrec;
180
        EVTREC evtrec;
174
       
181
       
175
  typedef struct {
182
  typedef struct {
176
        unsigned long id;
183
        unsigned long id;
177
        unsigned long len;
184
        unsigned long len;
178
        unsigned long thLow, thUp, thStep;
-
 
179
        unsigned long threshold;
185
        unsigned long threshold;
180
        } THRREC;
186
        } THRREC;
181
  THRREC thrrec;
187
  THRREC thrrec;
-
 
188
 
-
 
189
  typedef struct {
-
 
190
        unsigned long id;
-
 
191
        unsigned long len;
-
 
192
        unsigned long bias;
-
 
193
        } BIASREC;
-
 
194
  BIASREC biasrec;
182
       
195
       
183
        double thresholdLow;
196
        double thresholdLow;
184
        double thresholdUp;
197
        double thresholdUp;
185
        double thresholdStep;
198
        double thresholdStep;
-
 
199
        double biasLow;
-
 
200
        double biasUp;
-
 
201
        double biasStep;
186
 
202
 
187
#define BSIZE 20000
203
#define BSIZE 20000
188
       
204
       
189
        int maxn = BSIZE-4; // 2 words x 2 headers
205
        int maxn = BSIZE-4; // 2 words x 2 headers
190
        int tdcdata, edge_type, overflow, tdc_num, channel, ev_dat, last_dat, nval_dat;
206
        int tdcdata, edge_type, overflow, tdc_num, channel, ev_dat, last_dat, nval_dat;
Line 203... Line 219...
203
        posrec.len = sizeof(posrec);
219
        posrec.len = sizeof(posrec);
204
        evtrec.id = EVTREC_ID;
220
        evtrec.id = EVTREC_ID;
205
        evtrec.len = sizeof(evtrec);
221
        evtrec.len = sizeof(evtrec);
206
        thrrec.id = THRREC_ID;
222
        thrrec.id = THRREC_ID;
207
        thrrec.len = sizeof(thrrec);
223
        thrrec.len = sizeof(thrrec);
-
 
224
        biasrec.id = BIASREC_ID;
-
 
225
        biasrec.len = sizeof(biasrec);
208
       
226
       
209
       
227
       
210
        cres = 0;
228
        cres = 0;
211
       
229
       
212
        GetCtrlVal (p1h, P1_NEVE, &runrec.nev);
230
        GetCtrlVal (p1h, P1_NEVE, &runrec.nev);
Line 239... Line 257...
239
        if (supr0) {
257
        if (supr0) {
240
          GetCtrlVal (p1h, P1_TDCMIN, &tdcmin);
258
          GetCtrlVal (p1h, P1_TDCMIN, &tdcmin);
241
          GetCtrlVal (p1h, P1_FRAC, &frac);
259
          GetCtrlVal (p1h, P1_FRAC, &frac);
242
        }
260
        }
243
       
261
       
244
        GetCtrlVal (p1h, P1_STHRLOW, &thresholdLow);
262
        GetCtrlVal (p1h, P1_SASD8THR, &thresholdLow);
245
        runrec.thLow = thresholdLow*1000; // mV
263
        runrec.thLow = thresholdLow*1000; // mV
246
        GetCtrlVal (p1h, P1_STHRUP, &thresholdUp);
264
        GetCtrlVal (p1h, P1_STHRUP, &thresholdUp);
247
        runrec.thUp = thresholdUp*1000; // mV
265
        runrec.thUp = thresholdUp*1000; // mV
248
        GetCtrlVal (p1h, P1_STEP, &thresholdStep);
266
        GetCtrlVal (p1h, P1_STEP, &thresholdStep);
249
        runrec.thStep = thresholdStep*1000; // mV
267
        runrec.thStep = thresholdStep*1000; // mV
250
       
268
       
-
 
269
        GetCtrlVal (p1h, P1_SBIAS, &biasLow);
-
 
270
        GetCtrlVal (p1h, P1_SBIASUP, &biasUp);
-
 
271
        GetCtrlVal (p1h, P1_SBIASSTEP, &biasStep);
-
 
272
        runrec.biasLow  = biasLow*1000;
-
 
273
        runrec.biasUp   = biasUp*1000;
-
 
274
        runrec.biasStep = biasStep*1000;
251
 
275
 
252
#ifdef USE_DAQ
276
#ifdef USE_DAQ
253
        V673A_map(0,CAEN_V673A,0);
277
        V673A_map(0,CAEN_V673A,0);
254
        V673A_init(0);
278
        V673A_init(0);
255
 
279
 
Line 266... Line 290...
266
        //}
290
        //}
267
        if (supr0) {
291
        if (supr0) {
268
          fseed = runrec.time & 0x7fffffff;
292
          fseed = runrec.time & 0x7fffffff;
269
          Uniform (1, fseed, &fracg);
293
          Uniform (1, fseed, &fracg);
270
        }
294
        }
271
       
295
 
-
 
296
  // Set SiPM bias voltage
-
 
297
  //SetDac(SIPM, 1.0);
-
 
298
  biasrec.bias = runrec.biasLow;
-
 
299
  while (biasrec.bias <= runrec.biasUp) {
-
 
300
        SetDac(SIPM, biasrec.bias/1000.0 - POWERSUPPLY);
-
 
301
        SetCtrlVal(p1h, P1_SBIAS, biasrec.bias/1000.0);
-
 
302
        status = fwrite(&biasrec, 1, biasrec.len, fp);
-
 
303
        if (print) printf("BIASREC status %d len %d bias %d\n", status, biasrec.len, biasrec.bias);
-
 
304
 
-
 
305
  // Set ASD threshold voltage
272
  thrrec.threshold = (unsigned long) ceil(thresholdLow*1000); // threshold in mV
306
  thrrec.threshold = (unsigned long) ceil(thresholdLow*1000); // threshold in mV
273
  while (thrrec.threshold <= thresholdUp*1000) {
307
  while (thrrec.threshold <= thresholdUp*1000) {
274
    SetDac(0, thrrec.threshold/1000.0);
308
    SetDac(ASD8, thrrec.threshold/1000.0);
275
        SetCtrlVal(p1h, P1_STHRLOW, thrrec.threshold/1000.0);
309
        SetCtrlVal(p1h, P1_SASD8THR, thrrec.threshold/1000.0);
276
    //wait_loop(100000);
-
 
277
    status = fwrite(&thrrec, 1, thrrec.len, fp);
310
    status = fwrite(&thrrec, 1, thrrec.len, fp);
278
    if (print) printf("THRREC status %d len %d threshold %d\n", status, thrrec.len, thrrec.threshold);
311
    if (print) printf("THRREC status %d len %d threshold %d\n", status, thrrec.len, thrrec.threshold);
279
   
312
   
280
  for (posrec.ix=0; posrec.ix<runrec.nx; posrec.ix++) {
313
  for (posrec.ix=0; posrec.ix<runrec.nx; posrec.ix++) {
281
                posrec.xset = runrec.x0 + posrec.ix*runrec.dx;
314
                posrec.xset = runrec.x0 + posrec.ix*runrec.dx;
Line 284... Line 317...
284
          do {
317
          do {
285
        MIKRO_MoveTo (MIKRO_X, posrec.xset);
318
        MIKRO_MoveTo (MIKRO_X, posrec.xset);
286
        MIKRO_GetPosition(MIKRO_X, &mikroX);
319
        MIKRO_GetPosition(MIKRO_X, &mikroX);
287
      } while (abs(posrec.xset - mikroX) > STEP_TOLERANCE);
320
      } while (abs(posrec.xset - mikroX) > STEP_TOLERANCE);
288
          //printf("->MIKRO_MoveTo (1, x);%d\n",posrec.xset);
321
          //printf("->MIKRO_MoveTo (1, x);%d\n",posrec.xset);
289
#endif
322
#endif
290
          //SetCtrlVal (p1h, P1_X, posrec.xset);
323
          //SetCtrlVal (p1h, P1_X, posrec.xset);
291
          posrec.xset = mikroX; // set the true value
324
          posrec.xset = mikroX; // set the true value
292
          SetCtrlVal(p1h, P1_X, mikroX);
325
          SetCtrlVal(p1h, P1_X, mikroX);
293
          SetCtrlVal (p1h, P1_IX, posrec.ix);
326
          SetCtrlVal (p1h, P1_IX, posrec.ix);
294
          for (posrec.iy=0; posrec.iy<runrec.ny; posrec.iy++) {
327
          for (posrec.iy=0; posrec.iy<runrec.ny; posrec.iy++) {
295
      posrec.yset = runrec.y0 + posrec.iy*runrec.dy;
328
      posrec.yset = runrec.y0 + posrec.iy*runrec.dy;
296
#ifdef USE_MIKRO_Y
329
#ifdef USE_MIKRO_Y
297
      //printf("MIKRO_MoveTo (2, y);%d\n",y);
330
      //printf("MIKRO_MoveTo (2, y);%d\n",y);
298
      do {
331
      do {
299
        MIKRO_MoveTo (MIKRO_Y, posrec.yset);
332
        MIKRO_MoveTo (MIKRO_Y, posrec.yset);
300
        MIKRO_GetPosition(MIKRO_Y, &mikroY);
333
        MIKRO_GetPosition(MIKRO_Y, &mikroY);
301
        } while (abs(posrec.yset - mikroY) > STEP_TOLERANCE);
334
        } while (abs(posrec.yset - mikroY) > STEP_TOLERANCE);
302
          //printf("->MIKRO_MoveTo (2, y);%d\n",posrec.yset);
335
          //printf("->MIKRO_MoveTo (2, y);%d\n",posrec.yset);
303
#endif
336
#endif
Line 336... Line 369...
336
            count=0;
369
            count=0;
337
            ntics=0;
370
            ntics=0;
338
            if (print) printf("Event counter: %d\n", evtrec.nev);
371
            if (print) printf("Event counter: %d\n", evtrec.nev);
339
           
372
           
340
                //if (t!=told ) printf("%d in %2.2f min daq::event() %s\n",i, (double)(t-tstart)/60., ctime(&t)); 
373
                //if (t!=told ) printf("%d in %2.2f min daq::event() %s\n",i, (double)(t-tstart)/60., ctime(&t)); 
341
             
374
             
342
#ifdef USE_DAQ
375
#ifdef USE_DAQ
343
#ifdef CAEN_V673A
376
#ifdef CAEN_V673A
344
 
377
 
345
   
378
   
346
        V462_start0(0);
379
        V462_start0(0);
347
                //tmlnk (tout); 
380
                //tmlnk (tout); 
Line 457... Line 490...
457
          if (!daq_on) break;
490
          if (!daq_on) break;
458
        } // y loop
491
        } // y loop
459
        if (!daq_on) break;
492
        if (!daq_on) break;
460
        thrrec.threshold += thresholdStep*1000;
493
        thrrec.threshold += thresholdStep*1000;
461
        } // threhsold loop
494
        } // threhsold loop
-
 
495
        if (!daq_on) break;
-
 
496
        biasrec.bias += runrec.biasStep;
-
 
497
        } // bias loop
-
 
498
       
-
 
499
        SetDac(SIPM, 0); // safety
462
       
500
       
463
  //if (dsave) {
501
  //if (dsave) {
464
    time (&endrec.time);
502
    time (&endrec.time);
465
    status = fwrite (&endrec, 1, endrec.len, fp);
503
    status = fwrite (&endrec, 1, endrec.len, fp);
466
    if (print) printf("ENDREC status %d len %d\n", status, endrec.len);
504
    if (print) printf("ENDREC status %d len %d\n", status, endrec.len);
Line 545... Line 583...
545
  SetCtrlVal(p1h, P1_ADCHL, runrec.xy-2);
583
  SetCtrlVal(p1h, P1_ADCHL, runrec.xy-2);
546
 
584
 
547
  QueueUserEvent (1000, p1h, P1_RESET);
585
  QueueUserEvent (1000, p1h, P1_RESET);
548
  //QueueUserEvent (1000, p1h, P1_ASD8THR);
586
  //QueueUserEvent (1000, p1h, P1_ASD8THR);
549
  QueueUserEvent (1000, p1h, P1_AMPDISSHTHR);
587
  QueueUserEvent (1000, p1h, P1_AMPDISSHTHR);
-
 
588
  QueueUserEvent (1000, p1h, P1_BIAS);
550
  do {
589
  do {
551
    GetUserEvent (1, &pID, &rID);
590
    GetUserEvent (1, &pID, &rID);
552
        switch (rID) {
591
        switch (rID) {
553
      case P1_TIMER:
592
      case P1_TIMER:
554
        ntics+=1;
593
        ntics+=1;
Line 572... Line 611...
572
          case P1_ZSET:
611
          case P1_ZSET:
573
            if (!daq_on) {
612
            if (!daq_on) {
574
              GetCtrlVal (p1h, P1_ZSET, &zpos);
613
              GetCtrlVal (p1h, P1_ZSET, &zpos);
575
#ifdef USE_MIKRO_Z
614
#ifdef USE_MIKRO_Z
576
          MIKRO_MoveTo (MIKRO_Z, zpos);
615
          MIKRO_MoveTo (MIKRO_Z, zpos);
577
#endif
616
#endif
578
        }
617
        }
579
            break;
618
            break;
580
          case P1_REREAD:
619
          case P1_REREAD:
581
            if (!daq_on) {
620
            if (!daq_on) {
582
          status = FileSelectPopup ("", "*.dat", ".dat",
621
          status = FileSelectPopup ("", "*.dat", ".dat",
583
                                    "Choose the previous file",
622
                                    "Choose the previous file",
584
                                    VAL_LOAD_BUTTON, 0, 0, 1, 0, dfile);
623
                                    VAL_LOAD_BUTTON, 0, 0, 1, 0, dfile);
Line 594... Line 633...
594
                          SetCtrlVal (p1h, P1_YSTEP, runrec.dy);
633
                          SetCtrlVal (p1h, P1_YSTEP, runrec.dy);
595
                          SetCtrlVal (p1h, P1_YMIN, runrec.y0);
634
                          SetCtrlVal (p1h, P1_YMIN, runrec.y0);
596
                          SetCtrlVal (p1h, P1_NEVE, runrec.nev);
635
                          SetCtrlVal (p1h, P1_NEVE, runrec.nev);
597
            }
636
            }
598
              }
637
              }
599
        }
638
        }
600
            break;
639
            break;
601
          case P1_MGET:
640
          case P1_MGET:
602
          #ifdef USE_MIKRO
641
          #ifdef USE_MIKRO
603
                MIKRO_GetPosition(MIKRO_X,&xpos);
642
                MIKRO_GetPosition(MIKRO_X,&xpos);
604
                Delay(0.01);
643
                Delay(0.01);
Line 648... Line 687...
648
          case P1_ADCLOG:
687
          case P1_ADCLOG:
649
            GetCtrlVal (p1h, P1_ADCLOG, &status);
688
            GetCtrlVal (p1h, P1_ADCLOG, &status);
650
        SetCtrlAttribute (p1h, P1_ADC, ATTR_YMAP_MODE, status);
689
        SetCtrlAttribute (p1h, P1_ADC, ATTR_YMAP_MODE, status);
651
                update_plots();
690
                update_plots();
652
            break;
691
            break;
653
          /*case P1_ASD8THR:
692
          case P1_ASD8THR:
654
            {
693
            {
655
              double value;
694
              double value;
656
              GetCtrlVal (p1h, P1_SASD8THR, &value);
695
              GetCtrlVal (p1h, P1_SASD8THR, &value);
657
              SetDac(0, value);
696
              SetDac(ASD8, value);
658
             
697
             
659
            }
698
            }
660
            break;*/
699
            break;
-
 
700
          case P1_BIAS:
-
 
701
                {
-
 
702
                  double value;
-
 
703
                  GetCtrlVal (p1h, P1_SBIAS, &value);
-
 
704
                  value -= POWERSUPPLY;
-
 
705
                  SetDac(SIPM, value);
-
 
706
                }
-
 
707
                break;
661
          case P1_AMPDISSHTHR:
708
          case P1_AMPDISSHTHR:
662
            {
709
            {
663
              double value;
710
              double value;
664
              GetCtrlVal (p1h, P1_SAMPDISSHTHR, &value);
711
              GetCtrlVal (p1h, P1_SAMPDISSHTHR, &value);
665
              SetDac(1, value);
712
              SetDac(AMPDISSH, value);
666
 
713
 
667
            }  
714
            }  
668
            break;
715
            break;
669
             
716
             
670
        }
717
        }