Subversion Repositories f9daq

Rev

Blame | Last modification | View Log | RSS feed

  1. #define USE_DAQ
  2.  
  3. // Izberi ustrezni interface v meniju projektnega okna
  4. //  Options->CompilerDefines (dodaj /DSISVME ali /DWIENVME)
  5. #ifdef USE_DAQ
  6. #  ifdef SISVME
  7. #    include "sisvme_dll.h"
  8. #  endif
  9. #  ifdef WIENVME
  10. #    include "wienvme_dll.h"
  11. #  endif
  12. #  ifdef WUSBVME
  13. #    include "wusbvme_dll.h"
  14. #  endif
  15. #  include "CAENV673A.h"
  16. #endif
  17.  
  18. #include <utility.h>
  19. #include <userint.h>
  20. #include <cvirte.h>    /* Needed if linking in external compiler; harmless otherwise */
  21. #include "rich_ui.h"
  22.  
  23. #define V673A_BASE_A24 0x130000
  24. #define USBVME_NAME "VM0120"
  25.  
  26. #define MAPFILE "icfa2013.txt"
  27.  
  28. #define MAXDATA 2000
  29. unsigned long dataa[3078];
  30. unsigned long data0[MAXDATA];
  31. unsigned long datac[1000];
  32.  
  33.  
  34. int p1h, p2h, p3h ;
  35. int p1h,rph,rID;
  36.  
  37.  
  38. int pmtmaparr[8][8] ;
  39. int pmtmap_i[64] ;
  40. int pmtmap_j[64] ;
  41. int data[64][64] ;
  42. int nndata[64] ;
  43. unsigned short acum_allch[65536] ;       
  44. unsigned short acum_snglch[64][512] ;
  45. //int offset=512 ;
  46. int offset=0 ;
  47. int min_tdc, max_tdc ;
  48. int min_tdcR, max_tdcR ;
  49.  
  50. int single_event ;
  51.  
  52. unsigned long pmtbitmap[2] ;
  53. unsigned long pmtbitmap_win[2] ;
  54.  
  55. int minhit ;
  56.  
  57. //*****************************************************************************
  58.  
  59. int read_pmtmap ( ) {
  60.   FILE *fp=fopen(MAPFILE,"r");
  61.   int ch, i, j ;
  62.  
  63.   while ( EOF != fscanf(fp,"%d %d %d\n",&ch,&i,&j) ) {
  64.     if ( i>7 || j>7 ) {
  65.       printf ( "Index out of range!!!! (%d,%d,%d)\n",ch,i,j ) ;
  66.       continue ;
  67.     }
  68.     pmtmaparr[i][j]=ch ;
  69.     pmtmap_i[ch] = i ;
  70.     pmtmap_j[ch] = j ;
  71.   }
  72.  
  73.   return 0 ;
  74. }
  75.  
  76. //*****************************************************************************
  77.  
  78. int draw_histos ( ) {
  79.   int i, ch ;
  80.   int harr[4]={HISTOS_H_1,HISTOS_H_2,HISTOS_H_3,HISTOS_H_4} ;
  81.  
  82.   for ( ch=0; ch<4; ch++ ) {
  83.     DeleteGraphPlot (p2h, harr[ch], -1, VAL_IMMEDIATE_DRAW);
  84.  
  85.     for ( i=0 ; i<nndata[ch] ; i++ ) {
  86.       if ( (data[ch][i]>>16)&(0x1) ) {
  87.         //printf ( "falling\n" ) ;
  88.             PlotPoint (p2h, harr[ch], data[ch][i]&0xFFFF, 1.0, VAL_SOLID_SQUARE, VAL_RED);
  89.         PlotLine (p2h, harr[ch], data[ch][i]&0xFFFF, 1.0, data[ch][i]&0xFFFF, 0.0, VAL_RED);
  90.       } else {
  91.         //printf ( "rising %d %X\n", ch, data[ch][i]&0xFFFF ) ;
  92.         PlotPoint (p2h, harr[ch], data[ch][i]&0xFFFF, 1.0, VAL_EMPTY_SQUARE, VAL_BLUE);
  93.         PlotLine (p2h, harr[ch], data[ch][i]&0xFFFF, 1.0, data[ch][i]&0xFFFF, 0.0, VAL_BLUE);
  94.       }
  95.     }
  96.        
  97.   }
  98.  
  99.    
  100.   return 0 ;
  101. }
  102.  
  103. //*****************************************************************************
  104.  
  105. int draw_acum_histos() {
  106.   int hsts[64]={P3_ACUM_1,P3_ACUM_2,P3_ACUM_3,P3_ACUM_4,P3_ACUM_5,P3_ACUM_6,P3_ACUM_7,P3_ACUM_8,P3_ACUM_9,P3_ACUM_10,
  107.                                 P3_ACUM_11,P3_ACUM_12,P3_ACUM_13,P3_ACUM_14,P3_ACUM_15,P3_ACUM_16,P3_ACUM_17,P3_ACUM_18,P3_ACUM_19,P3_ACUM_20,
  108.                                 P3_ACUM_21,P3_ACUM_22,P3_ACUM_23,P3_ACUM_24,P3_ACUM_25,P3_ACUM_26,P3_ACUM_27,P3_ACUM_28,P3_ACUM_29,P3_ACUM_30,
  109.                                 P3_ACUM_31,P3_ACUM_32,P3_ACUM_33,P3_ACUM_34,P3_ACUM_35,P3_ACUM_36,P3_ACUM_37,P3_ACUM_38,P3_ACUM_39,P3_ACUM_40,
  110.                                 P3_ACUM_41,P3_ACUM_42,P3_ACUM_43,P3_ACUM_44,P3_ACUM_45,P3_ACUM_46,P3_ACUM_47,P3_ACUM_48,P3_ACUM_49,P3_ACUM_50,
  111.                                 P3_ACUM_51,P3_ACUM_52,P3_ACUM_53,P3_ACUM_54,P3_ACUM_55,P3_ACUM_56,P3_ACUM_57,P3_ACUM_58,P3_ACUM_59,P3_ACUM_60,
  112.                                 P3_ACUM_61,P3_ACUM_62,P3_ACUM_63,P3_ACUM_64} ;
  113.   int i;               
  114.   double grmin,grmax;
  115.  
  116.   GetCtrlVal (p1h, P1_TDC_MAX, &max_tdc ) ;
  117.   GetCtrlVal (p1h, P1_TDC_MIN, &min_tdc ) ;
  118.   GetCtrlVal (p1h, P1_TDC_MAX_2, &max_tdcR ) ;
  119.   GetCtrlVal (p1h, P1_TDC_MIN_2, &min_tdcR ) ;
  120.   //SetAxisScalingMode (p1h, P1_ACUM_WIN, VAL_XAXIS, VAL_MANUAL, min_tdc, max_tdc);
  121.  
  122.   DeleteGraphPlot (p1h, P1_ACUM, -1, VAL_IMMEDIATE_DRAW);
  123.   DeleteGraphPlot (p1h, P1_ACUM_WIN, -1, VAL_IMMEDIATE_DRAW);
  124.          
  125.   PlotY (p1h, P1_ACUM, acum_allch, /*65536*/ 65536, VAL_UNSIGNED_SHORT_INTEGER,
  126.                  VAL_VERTICAL_BAR, VAL_NO_POINT, VAL_SOLID, 1, VAL_DK_BLUE);
  127.   PlotY (p1h, P1_ACUM_WIN, acum_allch, /*65536*/ 65536, VAL_UNSIGNED_SHORT_INTEGER,
  128.                  VAL_VERTICAL_BAR, VAL_NO_POINT, VAL_SOLID, 1, VAL_DK_BLUE);
  129.                                
  130.   GetAxisScalingMode (p1h, P1_ACUM_WIN, VAL_LEFT_YAXIS, 0, &grmin, &grmax );
  131.  
  132.   PlotLine (p1h, P1_ACUM_WIN, min_tdcR, 0, min_tdcR, grmax, VAL_RED);
  133.   PlotLine (p1h, P1_ACUM_WIN, max_tdcR, 0, max_tdcR, grmax, VAL_RED);
  134.   PlotLine (p1h, P1_ACUM_WIN, min_tdc, 0, min_tdc, grmax, VAL_GREEN);
  135.   PlotLine (p1h, P1_ACUM_WIN, max_tdc, 0, max_tdc, grmax, VAL_GREEN);
  136.  
  137.   for ( i=0; i<64; i++ ) {
  138.         DeleteGraphPlot (p3h, hsts[i], -1, VAL_IMMEDIATE_DRAW);
  139.          
  140.         PlotY (p3h, hsts[i], acum_snglch[i], 256, VAL_UNSIGNED_SHORT_INTEGER,
  141.                VAL_VERTICAL_BAR, VAL_NO_POINT, VAL_SOLID, 1, VAL_DK_BLUE);
  142.                          
  143.   }
  144.  
  145.   return 0 ;
  146. }
  147.  
  148. //*****************************************************************************
  149.  
  150. int draw_evnt() {
  151.   int i,j,color,frame;
  152.   int iijj[8]={1,3, 7,9, 13,15, 19,21} ;
  153. //  int iijj[8]={1,3, 7,9, 13,15, 19,21} ;
  154.  
  155.   DeleteGraphPlot (p1h, P1_EV_DI, -1, VAL_IMMEDIATE_DRAW);
  156.   for ( i=1; i<20; i+=6 ) {
  157.     for ( j=1; j<20; j+=6 ) {
  158.           PlotRectangle (p1h,P1_EV_DI,i,j,i+4,j+4,VAL_DK_GRAY,VAL_TRANSPARENT);
  159.     }
  160.   }  
  161.   for ( i=0; i<64; i++ ) {
  162.     if ( (pmtbitmap_win[i>>5]>>(i&0x1F))&0x1 ) {
  163.       color = VAL_DK_GREEN;
  164.       frame = VAL_DK_GREEN;
  165.     } else if ( (pmtbitmap[i>>5]>>(i&0x1F))&0x1 ) {
  166.       color = VAL_TRANSPARENT;
  167.       frame = VAL_RED;
  168.     } else {
  169.       color = -1 ;
  170.     }
  171.    
  172.     if ( color!=-1 ) {
  173.           PlotRectangle (p1h, P1_EV_DI,
  174.                          iijj[pmtmap_i[i]]+0.1,iijj[pmtmap_j[i]]+0.1,
  175.                          iijj[pmtmap_i[i]]+1.9,iijj[pmtmap_j[i]]+1.9,
  176.                          frame,color);
  177.     }
  178.   }
  179.   return 0 ;
  180. }
  181.  
  182. //*****************************************************************************
  183.  
  184. int num_gr_photons() {
  185.  
  186.   int rc=0;
  187.   long bitmap[2];
  188.   int i;
  189.  
  190.   bitmap[0]=pmtbitmap_win[0];
  191.   bitmap[1]=pmtbitmap_win[1];
  192.   for (i=0;i<32;i++) {
  193.     if (bitmap[0]&0x1) rc++;
  194.     if (bitmap[1]&0x1) rc++;
  195.     bitmap[0]>>=1;
  196.     bitmap[1]>>=1;
  197.   }
  198.   printf("%08X\t%08X\n",pmtbitmap_win[0],pmtbitmap_win[1]);
  199.   printf("num_gr_photons %d\n",rc);    
  200.   return rc;
  201. }
  202.  
  203. //*****************************************************************************
  204.  
  205. int initvar(unsigned long xxx[],int n) {
  206.   for (;--n>=0;xxx[n]=0);
  207.   return 0;
  208. }
  209.  
  210. //*****************************************************************************
  211.  
  212. int daq(){
  213.  
  214.   static int cdaq=0;
  215.   int dum;
  216.   int error,i,j,fcount,fcountold=-1,nauto,fauto;
  217.   int nfirst[3],ntrig[3],ndata[3],ndatac,neve,ntrold;
  218.   unsigned short *j16=(unsigned short *) &j;
  219.  
  220.   unsigned long ext_c;
  221.  
  222.   char filename[256],path[256], fname[256];
  223.   int maxeve,print,neve_sel=0,nueve=0;
  224.  
  225.   unsigned int bsr ;
  226.   unsigned short dataxxx ;
  227.   unsigned short edge_type, overflow, channel, ev_dat, tdc_num, last_dat, nval_dat;
  228.   unsigned short gerror ;
  229.   int hits=0 ;
  230.   //int last[2] ;
  231.   int last_ev_no = -1 ;
  232.  
  233.  
  234.   if (cdaq==1) return -1;
  235.   else cdaq=1;
  236.  
  237. // initialize VME interface            
  238. #ifdef USE_DAQ
  239.   error = V673A_map (0,V673A_BASE_A24, 1);
  240.   error = V673A_init(0);
  241.   V673A_setreg(0,0x1a,0x003e);
  242.   V673A_setreg(0,0x1e,0x003e);
  243.   error = V673A_clallb(0);
  244. #endif
  245.  
  246.  
  247.   SetCtrlVal (p1h, P1_LED_DAQ,1);
  248.   SetCtrlVal (p1h, P1_TRIG, 0 ) ;
  249.   GetCtrlVal (p1h, P1_DEBUG, &print ) ;
  250.   GetCtrlVal (p1h, P1_NAUTO, &nauto ) ;
  251.   GetCtrlVal (p1h, P1_AUTOSAVE, &fauto ) ;  
  252.   GetCtrlVal (p1h, P1_NEVNT, &maxeve ) ;
  253.   GetCtrlVal (p1h, P1_FNAME, fname );
  254.   GetCtrlVal (p1h, P1_PATH, path );
  255.   GetCtrlVal (p1h, P1_TDC_MAX, &max_tdc ) ;
  256.   GetCtrlVal (p1h, P1_TDC_MIN, &min_tdc ) ;
  257.   GetCtrlVal (p1h, P1_TDC_MAX_2, &max_tdcR ) ;
  258.   GetCtrlVal (p1h, P1_TDC_MIN_2, &min_tdcR ) ;
  259.   GetCtrlVal (p1h, P1_SINGLE, &single_event ) ;
  260.   //PlotLine (p1h, P1_ACUM_WIN, min_tdcR, 0, min_tdcR, 1000, VAL_RED);
  261.   //PlotLine (p1h, P1_ACUM_WIN, max_tdcR, 0, max_tdcR, 1000, VAL_RED);
  262.   //PlotLine (p1h, P1_ACUM_WIN, min_tdc, 0, min_tdc, 1000, VAL_GREEN);
  263.   //PlotLine (p1h, P1_ACUM_WIN, max_tdc, 0, max_tdc, 1000, VAL_GREEN);
  264.   //SetAxisScalingMode (p1h, P1_ACUM_WIN, VAL_XAXIS, VAL_MANUAL, min_tdc, max_tdc);
  265.   // start measurement
  266.   neve=0;
  267.   neve_sel=0;
  268.   ntrold=0;
  269.   rID=0;
  270.  
  271.   do {
  272. /*
  273.     if (( neve%nauto==0 && fauto==1 ) || (neve==0 && fauto==1)){
  274.        fcount=neve/nauto;
  275.        if ( fcountold < fcount ) {
  276.              sprintf(filename,"%s\\%s_file%d.dat",path,fname,fcount);
  277.          printf("%s\n",filename);
  278.          fcountold=fcount ;
  279.        }
  280.     }
  281. */  
  282.      
  283.     if ( rID == P1_STOP ) break ;
  284. #ifdef USE_DAQ
  285.     ntrig[0] = V673A_ntrig (0);
  286. #endif
  287.     //printf ( "%d\t", ntrig[0] ) ;
  288.     //if (ntrig[0]!=-1) {
  289.     if (ntrig[0]>ntrold) {
  290.       ntrold=ntrig[0]-1;
  291.       initvar ( data0, 1024 ) ;
  292.      
  293. #ifdef USE_DAQ
  294.       ndata[0] = V673A_getevnt (0,ntrold,data0,MAXDATA);
  295. #endif
  296. //printf ( "%d\t", ndata[0] ) ;
  297.      
  298.           for ( i=0;i<ndata[0];i++ ) {
  299.             dataa[i]=0xc3ffffff & data0[i];
  300. //        printf ( "%d\t", data0[i] ) ;
  301.           }
  302.       ntrold=(ntrold+1)&0xffff;
  303.  
  304.       if ( ndata[0] >0 ) {
  305.         pmtbitmap[0] = 0 ;
  306.             pmtbitmap[1] = 0 ;
  307.         pmtbitmap_win[0] = 0 ;
  308.             pmtbitmap_win[1] = 0 ;
  309.      
  310.         for (i=0;i<ndata[0];i++) {
  311.           dataxxx   =  data0[i] & 0xFFFF ;
  312.           edge_type = (data0[i]>>16)&0x1  ;
  313.           overflow  = (data0[i]>>17)&0x1  ;
  314.           tdc_num   = (data0[i]>>25)&0x1  ;
  315.           channel   = (data0[i]>>18)&0x1F|tdc_num<<5 ;
  316.           ev_dat    = (data0[i]>>23)&0x1  ;    
  317.           last_dat  = (data0[i]>>30)&0x1  ;
  318.           nval_dat  = (data0[i]>>31)&0x1  ;
  319.           if (ev_dat == 0) { // event data
  320.                 hits++ ;
  321.                     if ( nndata[channel] < 63 ) {
  322.                       data[channel][nndata[channel]++] = dataxxx|edge_type<<16 ;
  323.                      
  324.                     }
  325.                     if ((edge_type & 0x1)==0 ) { // rising edge
  326.                       acum_allch[dataxxx]++ ;
  327.                       if ((0<=(dataxxx-offset))&&((dataxxx-offset)<512) ) {   // siroko okno  
  328.                         acum_snglch[channel][dataxxx-offset]++ ;
  329.                       }
  330.                       if ((min_tdcR<=(dataxxx-offset)) && ((dataxxx-offset)<max_tdcR)) {   // rdece okno  
  331.                 if ( channel>31 )
  332.                       pmtbitmap[1] |= 1<<(channel-32) ;
  333.                     else
  334.                           pmtbitmap[0] |= 1<<(channel) ;
  335.                   }  
  336.                   if ( (min_tdc<=(dataxxx-offset)) && ((dataxxx-offset)<max_tdc) ) {  // zeleno okno  
  337.                 if ( channel>31 )
  338.                           pmtbitmap_win[1] |= 1<<(channel-32);
  339.                         else
  340.                           pmtbitmap_win[0] |= 1<<(channel);
  341.                   }
  342.                         }
  343.               } else if (last_dat==0) { //not last datum
  344.                 //pmtbitmap[0] = 0;
  345.                     //pmtbitmap[1] = 0;
  346.                     last_ev_no = dataxxx;
  347.               }
  348.         }
  349.  
  350.                 if (num_gr_photons() >= minhit) {
  351.           draw_evnt();
  352.           //draw_histos();
  353.           draw_acum_histos();
  354.               neve_sel++;
  355.                 }
  356.  
  357.       }
  358.       neve++;
  359.     } else {
  360.       error = V673A_clallb(0);
  361.       ntrold=0;
  362.         }
  363.     SetCtrlVal (p1h, P1_PROC, (neve*100)/maxeve ) ;
  364.     SetCtrlVal (p1h, P1_TRIG, neve ) ;        
  365.     do {
  366.       nueve=GetUserEvent (0, &rph, &rID);
  367.     } while ( rID != P1_STOP && nueve>0 );
  368.         if ( rID == P1_STOP ) break ;
  369.   } while ( (neve < maxeve) && (neve_sel<1 || !single_event) ) ;
  370.  
  371.   SetCtrlVal (p1h, P1_LED_DAQ,0);
  372.   cdaq=0;
  373.   return 0;
  374. }
  375.  
  376. //*****************************************************************************
  377. //*************************** MAIN ********************************************
  378. //*****************************************************************************
  379.  
  380. int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
  381.                                            LPSTR lpszCmdLine, int nCmdShow)
  382. {
  383.   int error;
  384.   int i,j;
  385.   int nevnt,cnt;
  386.   int pmtmap[32][32] ;
  387.   int gray[16] = {0x000000, 0x111111, 0x222222, 0x333333, 0x444444, 0x555555, 0x666666,
  388.                   0x777777, 0x888888, 0x999999, 0xAAAAAA, 0xBBBBBB, 0xCCCCCC, 0xDDDDDD,
  389.                   0xEEEEEE, 0xFFFFFF } ;
  390.   double x, y, min_r, max_r, r1, r2 ;
  391.  
  392.   ColorMapEntry grCol[16] ;
  393.  
  394.   grCol[0].dataValue.valInt = 0 ;
  395.   grCol[0].color = gray[0] ;
  396.   grCol[1].dataValue.valInt = 100000 ;
  397.   grCol[1].color = gray[15] ;
  398.  
  399.  
  400.   read_pmtmap ( ) ;
  401.  
  402.   for ( i=0 ; i<32; i++ ) {
  403.     for ( j=0 ; j<32; j++ ) {
  404.       if ( ( (((i+2)/4)%2) != 0 ) && ( (((j+2)/4)%2) != 0 ) )
  405.         pmtmap[i][j]=1000000 ;
  406.       else pmtmap[i][j]=0 ;
  407.       //pmtmap[i][j]=(i+1)*(i+1)*(i+1)*(j+1) ;
  408.     }
  409.   }
  410.  
  411.   p1h = LoadPanel (0, "rich_ui.uir", P1);
  412. //  p2h = LoadPanel (0, "laprich.uir", HISTOS);
  413.   p3h = LoadPanel (0, "rich_ui.uir", P3);
  414.   DisplayPanel (p1h);
  415. //  DisplayPanel (p2h);
  416.   DisplayPanel (p3h);
  417.   for ( i=1; i<20; i+=6 ) {
  418.     for ( j=1; j<20; j+=6 ) {
  419.           PlotRectangle (p1h,P1_EV_DI,i,j,i+4,j+4,VAL_DK_GRAY,VAL_TRANSPARENT);
  420.     }
  421.   }  
  422.  
  423. #ifdef USE_DAQ
  424. #  ifdef WUSBVME
  425.      VME_START(USBVME_NAME);
  426. #   else
  427.      VME_START(NULL);
  428. #  endif
  429. #endif  
  430.  
  431.   do {
  432.     GetUserEvent (1, &rph, &rID);
  433.         switch (rID){
  434.       case P1_EV_PL:
  435. //        PlotScaledIntensity (p1h, P1_EV_DI, pmtmap, 32, 32, VAL_INTEGER,
  436. //                             1.0, 0.0, 1.0, 0.0, grCol, 0xff0000, 2, 1, 0);
  437.             draw_evnt();
  438.         break;
  439.       case P1_READ_TDC:
  440.         daq(); //read_tdc ( ) ;
  441.         break;
  442.       case P1_DRAWH:
  443. //        draw_histos ( ) ;
  444.         draw_acum_histos ( ) ;
  445.         break;
  446.       case P1_SINGLE:
  447.         GetCtrlVal (p1h, P1_SINGLE, &single_event ) ;
  448.         break;
  449.       case P1_CONT_DAQ:
  450.         nevnt=0;
  451.         cnt=0;
  452.         minhit=0;
  453.         GetCtrlVal (p1h, P1_NEVNT, &nevnt );
  454.         GetCtrlVal (p1h, P1_MINHIT, &minhit );
  455. //        printf("%d %d\n", nevnt, minhit);
  456. //        while((read_tdc()<minhit)&&(cnt++<nevnt)) ;
  457.         daq();  
  458. //        draw_evnt();
  459.         break;
  460.       case P1_EV_DI:
  461.         GetCtrlVal (p1h, P1_R_MIN, &min_r ) ;
  462.         GetCtrlVal (p1h, P1_R_MAX, &max_r ) ;
  463.         r1=min_r*2.0 ;
  464.         r2=max_r*2.0 ;
  465.         GetGraphCursor (p1h, P1_EV_DI, 1, &x, &y);
  466.         printf ( "x:%5.2f\ty:%5.2f\n", x, y ) ;
  467.         draw_evnt();
  468.             PlotOval (p1h, P1_EV_DI, x-r1, y-r1, x+r1, y+r1, VAL_RED, VAL_TRANSPARENT);
  469.             PlotOval (p1h, P1_EV_DI, x-r2, y-r2, x+r2, y+r2, VAL_RED, VAL_TRANSPARENT);
  470.         break;
  471.       case P1_PRINT:
  472.         SetCtrlVal (p1h, P1_PL,1);
  473.                 PrintCtrl (p1h, P1_EV_DI, "event.tif", 1, VAL_FULL_PANEL);
  474.         SetCtrlVal (p1h, P1_PL,0);
  475.         break;
  476.       case P1_RESET:
  477.         break;
  478. //      case P1_PRINT:
  479. //        break;
  480.       default:
  481.         break;
  482.     }
  483. //    if ( rID==P1_I_GATE ) init_gate ( ) ;
  484. } while ( (rID!=P1_EXIT) || (rph!=p1h) ) ;
  485.  
  486. //  CloseHandle(nHandle);
  487. #ifdef USE_DAQ
  488.   VME_STOP();
  489. #endif  
  490. //  printf ( "XXXX\n" ) ;
  491.   return 0;
  492. }
  493.