Subversion Repositories f9daq

Compare Revisions

Ignore whitespace Rev 297 → Rev 298

/cvi/apps/petdaq/daq_cvi.c
0,0 → 1,581
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 
// Izberi ustrezni interface v meniju projektnega okna
// Options->CompilerDefines (dodaj /DSISVME ali /DWIENVME)
#ifdef USE_DAQ
# ifdef SISVME
# include "sisvme_dll.h"
# endif
# ifdef WIENVME
# include "wienvme_dll.h"
# endif
# ifdef WUSBVME
# include "wusbvme_dll.h"
# endif
 
#endif
 
#include "wusbvme_dll.h"
#include <formatio.h>
 
#include "daq_cvi.h"
#include "CAENV965_DEF.h"
#define USBVME_NAME "VM0120"
 
#define VERSION 1.0
#define TIMEOUT 3
 
/* VME modules */
 
#define CAEN_V792 0x340000 // IJS V792
#define CAEN_V792_1 0x530000 // FMF1 V792
#define CAEN_V792_2 0x630000 // FMF2 V792
#define CAEN_V965 0x350000 // IJS V965
int addr[3]={CAEN_V792,CAEN_V792_1,CAEN_V965 };
int nadc=2;
#define BUFF_L 2048
static int stackwrite[10000];
static int stackdata[10000],stackdump[27000];
 
 
/************************************************/
int weight_while(int num)
{
int i, tmp;
 
for ( i =0; i <num; i++ ) tmp = 0;
return 0;
}
#define WWHILE weight_while(0)
 
#define TRUE 1
#define FALSE 0
 
int timer_out;
//struct sigaction oact;
void timerast (int signumber)
{
timer_out = TRUE;
fprintf(stderr,"TIMEOUT !!!\n");
}
 
void tmlnk (int tout)
{
/*
timer_out = FALSE;
struct sigaction act;
struct itimerval tdelay;
 
act.sa_handler = timerast;
sigemptyset (&act.sa_mask);
act.sa_flags = 0;
 
tdelay.it_value.tv_sec = tout / 100;
tdelay.it_value.tv_usec = 10000 * (tout % 100);
tdelay.it_interval.tv_sec = 0;
tdelay.it_interval.tv_usec = 0;
 
if (sigaction (SIGALRM, &act, &oact) < 0)
{
perror ("sigaction(tmlnk)");
exit (EXIT_FAILURE);
}
if (setitimer (ITIMER_REAL, &tdelay, NULL) < 0)
{
perror ("setitimer(tmlnk)");
exit (EXIT_FAILURE);
}
*/
}
 
void tmulk ()
{
/*
struct itimerval tdelay;
 
tdelay.it_value.tv_sec = 0;
tdelay.it_value.tv_usec = 0;
tdelay.it_interval.tv_sec = 0;
tdelay.it_interval.tv_usec = 0;
 
if (setitimer (ITIMER_REAL, &tdelay, NULL) < 0)
{
perror ("setitimer(tmulk)");
exit (EXIT_FAILURE);
}
if (sigaction (SIGALRM, &oact, NULL) < 0)
{
perror ("sigaction(tmulk)");
exit (EXIT_FAILURE);
}
*/
}
 
int fexist( char * path){
int size=0;
return GetFileInfo(path,&size);
}
 
 
 
uint32_t fInit[MAXSTACKSIZE];
uint32_t fRun[MAXSTACKSIZE];
int init(){
if (WUSB_udev == NULL) return -1;
int retval = xxusb_register_write(WUSB_udev,1,0x0); // Stop DAQ mode
if (retval<0) return retval;
while (xxusb_usbfifo_read(WUSB_udev,(int *) stackdump,BUFF_L,100)>0);
 
 
int rate=1000;
int ii=80000000/rate-40; // 80 MHz
if (ii<72) ii=72;
// Set DGG channel A as a pulser, output on O1,
// with delay =500 x 12.5ns,
// and width = 500 x 12.5ns,
// not latching or inverting
// VME_DGG(udev,0,6,0,24000,6000,0,0);
VME_DGG(WUSB_udev,0,6,0,ii,40,0,0);
// Set DGG channel B to trigger on NIM1, output on O2,
// with delay =200 x 12.5ns,
// and width = 200 x 12.5ns,
// not latching or inverting
VME_DGG(WUSB_udev,1,1,1,0,10,0,1);
printf("CAEN V965 Pedestal set to %d\n", fPedestal);
 
// INIT stackdata
int fPedestal=255;
WIENER_VMUSB_StackInit();
 
 
for (int i=0;i<nadc;i++){
WIENER_VMUSB_StackWriteA24D16( addr[i] + CAENV965_CRN , 0x0);
WIENER_VMUSB_StackWriteA24D16( addr[i] + CAENV965_GEO , i);
WIENER_VMUSB_StackReadA24D16(addr[i] + CAENV965_GEO);
for (int j=0;j<32;j++){
WIENER_VMUSB_StackWriteA24D16(addr[i] + CAENV965_THM + 0x02*j, fThreshold[j+i*32]); // threshold/kill for 32 channels
}
WIENER_VMUSB_StackWriteA24D16( addr[i] + CAENV965_BS1, 0x80 ); // soft reset
WIENER_VMUSB_StackWriteA24D16( addr[i] + CAENV965_BC1, 0x80 ); // soft reset
WIENER_VMUSB_StackWriteA24D16( addr[i] + CAENV965_PED, fPedestal ); // pedestal
WIENER_VMUSB_StackWriteA24D16( addr[i] + CAENV965_BS2,0x5000);
WIENER_VMUSB_StackWriteA24D16( addr[i] + CAENV965_BS2,0x4); // clear module
WIENER_VMUSB_StackWriteA24D16( addr[i] + CAENV965_BC2,0x4);
}
WIENER_VMUSB_StackMarker(0xFAFC);
WIENER_VMUSB_StackGetUInt32(MAXSTACKSIZE, fInit);
// fInit->Print();
// READOUT stackdata
WIENER_VMUSB_StackInit();
WIENER_VMUSB_StackMarker(0xFFAB);
//fStack->ConditionalRead(addr[i] + CAENV965_SR1,0x1); // TRG wait : loop until bit 0 is on
// fStack->RepeatRead( CMD_A24, CMD_D32, addr[i] + CAENV965_OB,34,0); // repead read
//fStack->ConditionalRead(addr[i] + CAENV965_OB ,0x4000000) ; // loop until bit 26 is on, read data
for (int j=0;j<36;j++) WIENER_VMUSB_StackReadA24D32(addr[0] + CAENV965_OB);
//for (int j=0;j<36;j++) fStack->ReadA24D32(addr[1] + CAENV965_OB);
//for (int j=0;j<8;j++) fStack->ReadA24D32(addr[2] + CAENV965_OB);// 4 channels connected
WIENER_VMUSB_StackMarker(0xFAFB);
 
for (int k=0;k<nadc;k++){
WIENER_VMUSB_StackWriteA24D16(addr[k] + CAENV965_BS2,0x4); // clear module
WIENER_VMUSB_StackWriteA24D16(addr[k] + CAENV965_BC2,0x4);
}
 
//fStack->Print();
 
VME_LED_settings(WUSB_udev, 0,0,0,0); // Set Yellow LED to light with with USB out buffer not empty
VME_LED_settings(WUSB_udev, 1,1,0,0); // Set Red LED to light with NIM1
VME_LED_settings(WUSB_udev,2,0,0,0); // Set Green LED to light when stack is not empty
uint32_t vmereg;
VME_register_read(WUSB_udev,0x00,&vmereg);
printf("VMUSB Firmware ID -> 0x%08X\n",vmereg);
VME_register_read(WUSB_udev,0x04,&vmereg);
printf("VMUSB Global Mode -> 0x%08X\n",vmereg);
 
vmereg=(vmereg&0xF000)|0x0004;
VME_register_write(WUSB_udev,0x04,vmereg);
VME_register_write(WUSB_udev,0x08,0x00000080);
VME_register_write(WUSB_udev,0x28,0x0);
VME_register_write(WUSB_udev,0x2C,0x0);
VME_register_write(WUSB_udev,0x30,0x0);
VME_register_write(WUSB_udev,0x34,0x0);
VME_register_write(WUSB_udev,0x3C,0x000);
int nb = 0;
int ret= xxusb_stack_execute(WUSB_udev,(uint32_t *)fInit);
printf("Init::%d ret=%d\n",nb,ret);
if (ret>0) for (int ki=0;ki<ret/2;ki++) printf ("stackdata=0x%08X\n",stackdata[ki]);
int nb0= 0; //fStack->Get(10000,&stackwrite[0]);
if (nb0>768) {
fprintf(stderr,"nb0=%d > 768 error xxusb_stack_write\n", nb0);
exit(-1);
}
nb =xxusb_stack_write(WUSB_udev,0x2,(uint32_t *) fRun);
nb0=xxusb_stack_read(WUSB_udev,0x2,(uint32_t *) stackdata);
for (int li=0;li<fRun[0]+1;li++){
if (stackdata[li]!=fRun[li]) printf("%d %d init err %x %x\n",nb,nb0,fRun[li], stackdata[li]);
}
 
if (fMode==2) xxusb_register_write(WUSB_udev,1,0x1); // Start DAQ mode
printf("daq::init() \n");
return 0;
}
 
int connect(){
WIENER_VMUSB_VME_START(USBVME_NAME);
if (WUSB_udev == NULL) printf("daq::connect() not initialized");
printf("daq::connect()\n");
return 0;
}
int disconnect(){
/* zakljuci */
WIENER_VMUSB_VME_STOP();
printf("daq::disconnect()\n");
return 0;
}
 
int clear(){
return 0;
}
 
int module_header(int recid,uint32_t *data,int len){
data[0] = recid;
data[1] = (len >0)? len : 0 ;
return data[1]+2;
}
 
 
int event(unsigned int *data, int maxn, int *ctr, int print){
int tout=200; /* 1/100 of a second */
const int lsize=sizeof(uint32_t);
 
if (WUSB_udev==NULL) return -222;
ctr[0]++;
ctr[1]++;
int count=0;
switch (fMode){
case 0:// normal calls
{
unsigned short clr= 0x4;
unsigned int status=0;
int32_t mdata;
for (int i=0;i<nadc;i++){
// wait for trg
tmlnk (tout);
do WIENER_VMUSB_VME_A24D16_R( addr[i] + CAENV965_SR1, &status); while ( (status&0x1)==0 && timer_out==0 );
tmulk();
// readout data
if (timer_out) return 0;
int len=0;
do {
WIENER_VMUSB_VME_A24D32_R(addr[i] + CAENV965_OB, &mdata);
mdata=data[count++];
len++;
} while ( (mdata & 0x4000000)==0 && timer_out==0) ; // bit 26 EOB or not valid datum
// clear
WIENER_VMUSB_VME_A24D16_W( addr[i] + CAENV965_BS2, &clr);
WIENER_VMUSB_VME_A24D16_W( addr[i] + CAENV965_BC2, &clr);
if (count+2<maxn) {
if (print) printf("V965 %3d\n",len);
count+=module_header(0x130+i,&data[count],len);
ctr[2]++;
ctr[3]+=len;
}
timer_out=0;
}
}
break;
case 1:// stack execute
{
for (int k=0;k<10000;k++) data[k]=fRun[k];
int ret=xxusb_stack_execute(WUSB_udev,(uint32_t *) data); //The first element of the array is the number of bytes.
if (ret< 0 ) {
printf ("xxusb_stack_execute error err=%d\n",ret); \
count = 0;
} else count= ret/lsize;
 
}
break;
case 2:// stack load
{
int ret=xxusb_usbfifo_read(WUSB_udev,(int *) data,BUFF_L,100);
if (ret< 0 ) {
if (ret!=-110) {
printf ("xxusb_usbfifo_read error err=%d\n",ret);
end();
init();
}
count = 0;
} else {
if (0 && print && ret>0) {
for (int i=0;i<100;i++) {
printf ("%4d fifodata=0x%08X\n",i, data[i]);
if (data[i]==0xFAFB) break;
}
/*
0 fifodata=0x0000000D
1 fifodata=0x00000049
2 fifodata=0x0000FFAB
3 fifodata=0x00002000
4 fifodata=0x00000200
5 fifodata=0x00004141
6 fifodata=0x00000000
7 fifodata=0x00004057
8 fifodata=0x00000010
9 fifodata=0x00004052
10 fifodata=0x00000001
11 fifodata=0x0000405C
12 fifodata=0x00000011
13 fifodata=0x0000405D
14 fifodata=0x00000002
15 fifodata=0x0000405E
16 fifodata=0x00000012
17 fifodata=0x0000401C
18 fifodata=0x00000003
19 fifodata=0x0000402F
20 fifodata=0x00000013
21 fifodata=0x00004024
22 fifodata=0x00000004
23 fifodata=0x00004076
24 fifodata=0x00000014
25 fifodata=0x0000412F
26 fifodata=0x00000005
27 fifodata=0x0000404C
28 fifodata=0x00000015
29 fifodata=0x00004132
30 fifodata=0x00000006
31 fifodata=0x00004044
32 fifodata=0x00000016
33 fifodata=0x0000404A
34 fifodata=0x00000007
35 fifodata=0x0000409B
36 fifodata=0x00000017
37 fifodata=0x000040F1
38 fifodata=0x00000008
39 fifodata=0x00004087
40 fifodata=0x00000018
41 fifodata=0x00004173
42 fifodata=0x00000009
43 fifodata=0x0000404C
44 fifodata=0x00000019
45 fifodata=0x0000406C
46 fifodata=0x0000000A
47 fifodata=0x00004070
48 fifodata=0x0000001A
49 fifodata=0x0000406E
50 fifodata=0x0000000B
51 fifodata=0x00004014
52 fifodata=0x0000001B
53 fifodata=0x000040B7
54 fifodata=0x0000000C
55 fifodata=0x000040A9
56 fifodata=0x0000001C
57 fifodata=0x00004048
58 fifodata=0x0000000D
59 fifodata=0x00004118
60 fifodata=0x0000001D
61 fifodata=0x0000409D
62 fifodata=0x0000000E
63 fifodata=0x0000405B
64 fifodata=0x0000001E
65 fifodata=0x00004285
66 fifodata=0x0000000F
67 fifodata=0x00004159
68 fifodata=0x0000001F
69 fifodata=0x00000035
70 fifodata=0x00000400
71 fifodata=0x00000035
72 fifodata=0x00000600
73 fifodata=0x00000035
74 fifodata=0x0000FAFB
 
 
*/
}
if (print) printf("------------------ret=%d data[0]=%d\n",ret,(int)data[0]);
count= ret/lsize;
ctr[2]+=data[0];
ctr[3]+=count;
}
}
break;
}
return count*lsize;
}
 
int end(){
if (WUSB_udev!=NULL) {
xxusb_register_write(WUSB_udev,1,0x0); // Stop DAQ mode
while (xxusb_usbfifo_read(WUSB_udev,(int *) stackdata,BUFF_L,30)>0);
}
printf("daq::end()\n");
return 0;
}
 
int daq_init(){
fMode = 2;
fPedestal=255;
for (int i=0;i<128;i++){
if (i<72) fThreshold[i]= 0;
else fThreshold[i]= 0x1<<8; // samo 4 kanali na zadnjem modulu so enablani
}
fThresholdEnable=0;
fStop=0;
//fInit=NULL;
//fStack=NULL;
connect();
return 0;
}
 
 
/* ------------------- CatchSig ----------------- */
int ctrlcflag=0;
 
void SigInt (int sig)
{
ctrlcflag = 1;
timer_out=1;
}
 
 
int read_pedestals(char *fpedname) {
FILE *fped=fopen(fpedname,"r");
if(fped==NULL) return -1;
int j=0;
int ndim=400;
char line[ndim];
int val=0;
while (fgets(line,ndim,fped)!=NULL) {
sscanf(line,"%d",&val);
fThreshold[j++]=val;
}
fThresholdEnable=1;
//fclose(fped);
fclose(fped);
return 0;
}
int main (int argc, char **argv){
// intercept routine
if (signal (SIGINT, SigInt) == SIG_ERR) {
perror ("sigignore");
}
// print welcome message
time_t t,told=0, tstart, tstop;
time(&t);
fprintf(stdout,"#############################################\n");
fprintf(stdout,"Program %s version %2.1f\n",argv[0], VERSION);
fprintf(stdout,"Compiled on %s %s\n",__DATE__, __TIME__);
fprintf(stdout,"Runtime %s \n",ctime(&t));
fprintf(stdout,"#############################################\n");
int neve=-1;
char cfname[100]="test.dat";
char *fname=cfname;
char *fpedname=NULL;
#define BSIZE 10000
uint32_t data[10000];
daq_init();
 
if (argc>3) {
 
fpedname = argv[3];
read_pedestals(fpedname);
}
 
if (argc>2) neve = atoi(argv[2]); // negative argument time ( in s )limited event loop
if (argc>1) {
fname = argv[1];
if (fexist(fname)==1){
fprintf(stdout,"Error !\n");
fprintf(stdout,"File %s already exist. Appending ....\n",fname);
//fprintf(stdout,"Remove the file and restart !!!\n");
//exit(0);
}
}
FILE *fp=fopen(fname,"a");
//gzFile fp=gzopen(fname,"a");
init();
clear();
int hdr[4]={2}; // recid od run 11 naprej
int i=0;
int ntotal=0;
int counters[30]={0,0,0,0,0, 0,0,0,0,0,0,0};
char names[10][20]={"TRG","CAEN V965"};
time(&t);
tstart=t;
tstop=tstart+360000;
if (neve<-1) {
tstop=tstart-neve;
neve=-1;
}
for (i=0;i!=neve && !ctrlcflag && t<tstop;i++){
time(&t);
if (t!=told ) printf("%d in %2.2f min daq::event() %s\n",i, (double)(t-tstart)/60., ctime(&t));
int nb=event(data,BSIZE, counters,t!=told);
if (nb>0){
// zapis v datoteko
hdr[1]=nb+4*sizeof(int);
hdr[2]=time(NULL);
hdr[3]=i;
fwrite(hdr, sizeof(int),4 , fp);
//gzwrite(fp, hdr, sizeof(int)*4); //gzip
// recid=1 do runa 10. ntotal += fwrite(data, sizeof(int),nb, fp);
ntotal += fwrite(data, 1,nb, fp);
//ntotal += gzwrite(fp, data, nb);
told=t;
} else i--;
}
 
end();
printf("Number of Events: %d\n",i);
if (ctrlcflag) printf("User Program termination CTRL-C\n");
if (t>tstop ) printf("Timeout termination tstart# t>tstop: %d# %d >%d\n",(int)t, (int)tstart, (int) tstop);
 
fclose(fp);
//gzclose(fp);
fprintf(stdout,"%d bytes written to %s\nCounts:\n", (int) (ntotal*sizeof(int)),fname);
for (i=0;i<2;i++) fprintf(stdout,"%s\t%d\t%d\n",names[i],counters[2*i],counters[2*i+1]) ;
 
 
if (argc==1) {
fprintf(stdout,"Usage: %s [filename] [number of events] [thresholdfile]\n negative number of events = acq time in seconds\n",argv[0]);
}
disconnect();
return 0;
}
 
/cvi/apps/petdaq/daq_cvi.h
0,0 → 1,26
#ifndef _daq_h_
#define _daq_h_
//#include <vector>
//class VmUsbStack;
//class daq {
//public:
// VmUsbStack * fStack;
// VmUsbStack * fInit;
int fPedestal;
int fThresholdEnable;
int fThreshold[0xFF];
int fStop;
int fMode;
int clear();
int end();
int event(unsigned int *, int,int*, int );
int init();
int daq_init();
int connect();
int disconnect();
int read_pedestals(char *fpedname);
// daq();
// ~daq();
//};
 
#endif
/cvi/apps/petdaq/vmusb.cws
0,0 → 1,196
[Workspace Header]
Version = 1302
Pathname = "/c/home/cvi/apps/petdaq/vmusb.cws"
CVI Dir = "/c/program files (x86)/national instruments/cvi2013"
CVI Shared Dir = "/C/Program Files (x86)/National Instruments/Shared/CVI"
CVI Pub Local Dir = "/C/ProgramData/National Instruments/CVI2013"
CVI Pub Global Dir = "/C/ProgramData/National Instruments/CVI"
IVI Standard Root Dir = "/C/Program Files (x86)/IVI Foundation/IVI"
IVI Standard Root 64-bit Dir = "/C/Program Files/IVI Foundation/IVI"
VXIplug&play Framework Dir = "/C/Program Files (x86)/IVI Foundation/VISA/winnt"
VXIplug&play Framework 64-bit Dir = "/C/Program Files/IVI Foundation/VISA/win64"
Number of Projects = 1
Active Project = 1
Project 0001 = "vmusb.prj"
Drag Bar Left = 202
Window Top = 144
Window Left = 1
Window Bottom = 996
Window Right = 1536
Maximized = False
Maximized Children = True
Max32 Number Of Errors = 20
Track Include File Dependencies = True
Prompt For Missing Includes = True
Stop On First Error File = False
Bring Up Err Win At Start = True
Bring Up Err Win For Errors = False
Save Changes Before Running = "Always"
Save Changes Before Compiling = "Always"
Hide Windows = False
Break At First Statement = False
Sort Type = "File Name"
Number of Opened Files = 0
Window Confinement Region Enabled = True
MainColumnWidth = 185
FileDateColumnWidth = 70
FileSizeColumnWidth = 70
 
[Project Header 0001]
Version = 1302
Don't Update DistKit = False
Platform Code = 4
Build Configuration = "Debug"
Warn User If Debugging Release = 1
Batch Build Release = False
Batch Build Debug = False
 
[File 0001]
Path = "/c/home/cvi/instr/HISTO/H1D.fp"
File Type = "Function Panel"
Disk Date = 3574750011
In Projects = "1,"
 
[File 0002]
Path = "/c/home/cvi/instr/HISTO/H2D.fp"
File Type = "Function Panel"
Disk Date = 3574750011
In Projects = "1,"
 
[File 0003]
Path = "/c/home/cvi/instr/WUSBVME_DLL/wusbvme_dll.fp"
File Type = "Function Panel"
Disk Date = 3574750014
In Projects = "1,"
 
[File 0004]
Path = "/c/home/cvi/apps/petdaq/daq_cvi.c"
File Type = "CSource"
Disk Date = 3608123860
In Projects = "1,"
Window Top = 33
Window Left = 10
Source Window State = "1,23,23,23,0,24,24,0,0,0,0,1,0,1,0,0,11,0,21,24,193,683,1,0,"
 
[File 0005]
Path = "/c/home/cvi/apps/petdaq/vmusb_ctrl.c"
File Type = "CSource"
Disk Date = 3608123777
In Projects = "1,"
Window Top = 33
Window Left = 10
Source Window State = "1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,17,349,683,1,0,"
 
[File 0006]
Path = "/c/home/cvi/instr/vme/msvc/libusb.lib"
File Type = "Library"
Disk Date = 3574750013
In Projects = "1,"
 
[File 0007]
Path = "/c/home/cvi/instr/vme/msvc/vme.lib"
File Type = "Library"
Disk Date = 3608101166
In Projects = "1,"
 
[File 0008]
Path = "/c/home/cvi/apps/petdaq/vmusb_ctrl.uir"
File Type = "User Interface Resource"
Disk Date = 3608122151
In Projects = "1,"
 
[File 0009]
Path = "/c/home/cvi/apps/petdaq/daq_cvi.h"
File Type = "Include"
Disk Date = 3608097203
In Projects = "1,"
Source Window State = "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"
 
[Default Build Config 0001 Debug]
Generate Browse Info = False
Enable Uninitialized Locals Runtime Warning = True
Batch Build = False
Profile = "Disabled"
Debugging Level = "Standard"
Execution Trace = "Disabled"
Command Line Args = ""
Working Directory = ""
Environment Options = ""
External Process Path = ""
 
[Default Build Config 0001 Release]
Generate Browse Info = False
Enable Uninitialized Locals Runtime Warning = True
Batch Build = False
Profile = "Disabled"
Debugging Level = "Standard"
Execution Trace = "Disabled"
Command Line Args = ""
Working Directory = ""
Environment Options = ""
External Process Path = ""
 
[Default Build Config 0001 Debug64]
Generate Browse Info = False
Enable Uninitialized Locals Runtime Warning = True
Batch Build = False
Profile = "Disabled"
Debugging Level = "Standard"
Execution Trace = "Disabled"
Command Line Args = ""
Working Directory = ""
Environment Options = ""
External Process Path = ""
 
[Default Build Config 0001 Release64]
Generate Browse Info = False
Enable Uninitialized Locals Runtime Warning = True
Batch Build = False
Profile = "Disabled"
Debugging Level = "Standard"
Execution Trace = "Disabled"
Command Line Args = ""
Working Directory = ""
Environment Options = ""
External Process Path = ""
 
[Build Dependencies 0001]
Number of Dependencies = 0
 
[Build Options 0001]
Generate Browse Info = False
Enable Uninitialized Locals Runtime Warning = True
Execution Trace = "Disabled"
Profile = "Disabled"
Debugging Level = "Standard"
Break On Library Errors = True
Break On First Chance Exceptions = False
 
[Execution Target 0001]
Execution Target Address = "Local desktop computer"
Execution Target Port = 0
Execution Target Type = 0
 
[SCC Options 0001]
Use global settings = True
SCC Provider = ""
SCC Project = ""
Local Path = ""
Auxiliary Path = ""
Perform Same Action For .h File As For .uir File = "Ask"
Perform Same Action For .cds File As For .prj File = "Ask"
Username = ""
Comment = ""
Use Default Username = False
Use Default Comment = False
Suppress CVI Error Messages = False
Always show confirmation dialog = True
 
[DLL Debugging Support 0001]
External Process Path = ""
 
[Command Line Args 0001]
Command Line Args = ""
Working Directory = ""
Environment Options = ""
 
/cvi/apps/petdaq/vmusb.prj
0,0 → 1,513
[Project Header]
Version = 1302
Pathname = "/c/home/cvi/apps/petdemo/vmusb.prj"
CVI Dir = "/c/program files (x86)/national instruments/cvi2013"
CVI Shared Dir = "/C/Program Files (x86)/National Instruments/Shared/CVI"
CVI Pub Local Dir = "/C/ProgramData/National Instruments/CVI2013"
CVI Pub Global Dir = "/C/ProgramData/National Instruments/CVI"
IVI Standard Root Dir = "/C/Program Files (x86)/IVI Foundation/IVI"
VXIplug&play Framework Dir = "/C/Program Files (x86)/IVI Foundation/VISA/winnt"
IVI Standard Root 64-bit Dir = "/C/Program Files/IVI Foundation/IVI"
VXIplug&play Framework 64-bit Dir = "/C/Program Files/IVI Foundation/VISA/win64"
Number of Files = 9
Target Type = "Executable"
Flags = 2064
Copied From Locked InstrDrv Directory = False
Copied from VXIPNP Directory = False
Locked InstrDrv Name = ""
Don't Display Deploy InstrDrv Dialog = False
 
[Folders]
Folder 0 = "Source Files"
FolderEx 0 = "Source Files"
Folder 1 = "Instrument Files"
FolderEx 1 = "Instrument Files"
Folder 2 = "Library Files"
FolderEx 2 = "Library Files"
Folder 3 = "User Interface Files"
FolderEx 3 = "User Interface Files"
Folder 4 = "Include Files"
FolderEx 4 = "Include Files"
 
[File 0001]
File Type = "CSource"
Res Id = 1
Path Is Rel = True
Path Rel To = "Project"
Path Rel Path = "daq_cvi.c"
Path = "/c/home/cvi/apps/petdemo/daq_cvi.c"
Exclude = False
Compile Into Object File = False
Project Flags = 0
Folder = "Source Files"
Folder Id = 0
 
[File 0002]
File Type = "CSource"
Res Id = 2
Path Is Rel = True
Path Rel To = "Project"
Path Rel Path = "vmusb_ctrl.c"
Path = "/c/home/cvi/apps/petdemo/vmusb_ctrl.c"
Exclude = False
Compile Into Object File = False
Project Flags = 0
Folder = "Source Files"
Folder Id = 0
 
[File 0003]
File Type = "Function Panel"
Res Id = 3
Path Is Rel = True
Path Rel To = "Project"
Path Rel Path = "../../instr/HISTO/H1D.fp"
Path = "/c/home/cvi/instr/HISTO/H1D.fp"
Exclude = False
Project Flags = 0
Folder = "Instrument Files"
Folder Id = 1
 
[File 0004]
File Type = "Function Panel"
Res Id = 4
Path Is Rel = True
Path Rel To = "Project"
Path Rel Path = "../../instr/HISTO/H2D.fp"
Path = "/c/home/cvi/instr/HISTO/H2D.fp"
Exclude = False
Project Flags = 0
Folder = "Instrument Files"
Folder Id = 1
 
[File 0005]
File Type = "Function Panel"
Res Id = 5
Path Is Rel = True
Path Rel To = "Project"
Path Rel Path = "../../instr/WUSBVME_DLL/wusbvme_dll.fp"
Path = "/c/home/cvi/instr/WUSBVME_DLL/wusbvme_dll.fp"
Exclude = False
Project Flags = 0
Folder = "Instrument Files"
Folder Id = 1
 
[File 0006]
File Type = "Library"
Res Id = 6
Path Is Rel = True
Path Rel To = "Project"
Path Rel Path = "../../instr/vme/msvc/libusb.lib"
Path = "/c/home/cvi/instr/vme/msvc/libusb.lib"
Exclude = False
Project Flags = 0
Folder = "Library Files"
Folder Id = 2
 
[File 0007]
File Type = "Library"
Res Id = 7
Path Is Rel = True
Path Rel To = "Project"
Path Rel Path = "../../instr/vme/msvc/vme.lib"
Path = "/c/home/cvi/instr/vme/msvc/vme.lib"
Exclude = False
Project Flags = 0
Folder = "Library Files"
Folder Id = 2
 
[File 0008]
File Type = "User Interface Resource"
Res Id = 8
Path Is Rel = True
Path Rel To = "Project"
Path Rel Path = "vmusb_ctrl.uir"
Path = "/c/home/cvi/apps/petdemo/vmusb_ctrl.uir"
Exclude = False
Project Flags = 0
Folder = "User Interface Files"
Folder Id = 3
 
[File 0009]
File Type = "Include"
Res Id = 9
Path Is Rel = True
Path Rel To = "Project"
Path Rel Path = "daq_cvi.h"
Path = "/c/home/cvi/apps/petdemo/daq_cvi.h"
Exclude = False
Project Flags = 0
Folder = "Include Files"
Folder Id = 4
 
[Custom Build Configs]
Num Custom Build Configs = 0
 
[Default Build Config Debug]
Config Name = "Debug"
Is 64-Bit = False
Is Release = False
Default Calling Convention = "cdecl"
Optimization Level = "Optimize for speed (level 2)"
Require Prototypes = True
Show Warning IDs in Build Output = False
Selected Warning Level = "None"
Warning List None = "4,9,84,105,106,107,108,109,110,111"
Warning List Common = ""
Warning List Extended = ""
Warning List All = ""
Warning Mode = 0
Enable Unreferenced Identifiers Warning = False
Enable Pointer Mismatch Warning = False
Enable Unreachable Code Warning = False
Enable Assignment In Conditional Warning = False
Uninitialized Locals Compile Warning = "Aggressive"
Require Return Values = True
Enable C99 Extensions = False
Enable OpenMP Extensions = False
Stack Size = 250000
Stack Reserve = 1048576
Stack Commit = 4096
Image Base Address = 4194304
Image Base Address x64 = 4194304
Compiler Defines = "/DWIN32_LEAN_AND_MEAN /DWUSBVME"
Sign = False
Sign Store = ""
Sign Certificate = ""
Sign Timestamp URL = ""
Sign URL = ""
Manifest Embed = False
Icon File Is Rel = False
Icon File = ""
Application Title = ""
Use IVI Subdirectories for Import Libraries = False
Use VXIPNP Subdirectories for Import Libraries = False
Use Dflt Import Lib Base Name = True
Where to Copy DLL = "Do not copy"
Custom Directory to Copy DLL Is Rel = False
Custom Directory to Copy DLL = ""
Generate Source Documentation = "None"
Runtime Support = "Full Runtime Support"
Runtime Binding = "Shared"
Embed Project .UIRs = False
Generate Map File = False
Embed Timestamp = True
Create Console Application = False
Using LoadExternalModule = False
DLL Exports = "Include File Symbols"
Register ActiveX Server = False
Numeric File Version = "1,0,0,0"
Numeric Prod Version = "1,0,0,0"
Comments = ""
Comments Ex = ""
Company Name = ""
Company Name Ex = "%company"
File Description = "vmusb (Debug x86)"
File Description Ex = "%application (%rel_dbg %arch)"
File Version = "1.0"
File Version Ex = "%f1.%f2"
Internal Name = "vmusb"
Internal Name Ex = "%basename"
Legal Copyright = "Copyright © 2018"
Legal Copyright Ex = "Copyright © %company %Y"
Legal Trademarks = ""
Legal Trademarks Ex = ""
Original Filename = "vmusb.exe"
Original Filename Ex = "%filename"
Private Build = ""
Private Build Ex = ""
Product Name = " vmusb"
Product Name Ex = "%company %application"
Product Version = "1.0"
Product Version Ex = "%p1.%p2"
Special Build = ""
Special Build Ex = ""
Add Type Lib To DLL = False
Include Type Lib Help Links = False
TLB Help Style = "HLP"
Type Lib FP File Is Rel = False
Type Lib FP File = ""
 
[Default Build Config Release]
Config Name = "Release"
Is 64-Bit = False
Is Release = True
Default Calling Convention = "cdecl"
Optimization Level = "Optimize for speed (level 2)"
Require Prototypes = True
Show Warning IDs in Build Output = False
Selected Warning Level = "None"
Warning List None = "4,9,84,105,106,107,108,109,110,111"
Warning List Common = ""
Warning List Extended = ""
Warning List All = ""
Warning Mode = 0
Enable Unreferenced Identifiers Warning = False
Enable Pointer Mismatch Warning = False
Enable Unreachable Code Warning = False
Enable Assignment In Conditional Warning = False
Uninitialized Locals Compile Warning = "Aggressive"
Require Return Values = True
Enable C99 Extensions = False
Enable OpenMP Extensions = False
Stack Size = 250000
Stack Reserve = 1048576
Stack Commit = 4096
Image Base Address = 4194304
Image Base Address x64 = 4194304
Compiler Defines = "/DWIN32_LEAN_AND_MEAN /DWIENVME"
Sign = False
Sign Store = ""
Sign Certificate = ""
Sign Timestamp URL = ""
Sign URL = ""
Manifest Embed = False
Icon File Is Rel = False
Icon File = ""
Application Title = ""
Use IVI Subdirectories for Import Libraries = False
Use VXIPNP Subdirectories for Import Libraries = False
Use Dflt Import Lib Base Name = True
Where to Copy DLL = "Do not copy"
Custom Directory to Copy DLL Is Rel = False
Custom Directory to Copy DLL = ""
Generate Source Documentation = "None"
Runtime Support = "Full Runtime Support"
Runtime Binding = "Shared"
Embed Project .UIRs = False
Generate Map File = False
Embed Timestamp = True
Create Console Application = False
Using LoadExternalModule = False
DLL Exports = "Include File Symbols"
Register ActiveX Server = False
Add Type Lib To DLL = False
Include Type Lib Help Links = False
TLB Help Style = "HLP"
Type Lib FP File Is Rel = False
Type Lib FP File = ""
 
[Default Build Config Debug64]
Config Name = "Debug64"
Is 64-Bit = True
Is Release = False
Default Calling Convention = "cdecl"
Optimization Level = "Optimize for speed (level 2)"
Require Prototypes = True
Show Warning IDs in Build Output = False
Selected Warning Level = "None"
Warning List None = "4,9,84,105,106,107,108,109,110,111"
Warning List Common = ""
Warning List Extended = ""
Warning List All = ""
Warning Mode = 0
Enable Unreferenced Identifiers Warning = False
Enable Pointer Mismatch Warning = False
Enable Unreachable Code Warning = False
Enable Assignment In Conditional Warning = False
Uninitialized Locals Compile Warning = "Aggressive"
Require Return Values = True
Enable C99 Extensions = False
Enable OpenMP Extensions = False
Stack Size = 250000
Stack Reserve = 1048576
Stack Commit = 4096
Image Base Address = 4194304
Image Base Address x64 = 4194304
Compiler Defines = "/DWIN32_LEAN_AND_MEAN /DWIENVME"
Sign = False
Sign Store = ""
Sign Certificate = ""
Sign Timestamp URL = ""
Sign URL = ""
Manifest Embed = False
Icon File Is Rel = False
Icon File = ""
Application Title = ""
Use IVI Subdirectories for Import Libraries = False
Use VXIPNP Subdirectories for Import Libraries = False
Use Dflt Import Lib Base Name = True
Where to Copy DLL = "Do not copy"
Custom Directory to Copy DLL Is Rel = False
Custom Directory to Copy DLL = ""
Generate Source Documentation = "None"
Runtime Support = "Full Runtime Support"
Runtime Binding = "Shared"
Embed Project .UIRs = False
Generate Map File = False
Embed Timestamp = True
Create Console Application = False
Using LoadExternalModule = False
DLL Exports = "Include File Symbols"
Register ActiveX Server = False
Add Type Lib To DLL = False
Include Type Lib Help Links = False
TLB Help Style = "HLP"
Type Lib FP File Is Rel = False
Type Lib FP File = ""
 
[Default Build Config Release64]
Config Name = "Release64"
Is 64-Bit = True
Is Release = True
Default Calling Convention = "cdecl"
Optimization Level = "Optimize for speed (level 2)"
Require Prototypes = True
Show Warning IDs in Build Output = False
Selected Warning Level = "None"
Warning List None = "4,9,84,105,106,107,108,109,110,111"
Warning List Common = ""
Warning List Extended = ""
Warning List All = ""
Warning Mode = 0
Enable Unreferenced Identifiers Warning = False
Enable Pointer Mismatch Warning = False
Enable Unreachable Code Warning = False
Enable Assignment In Conditional Warning = False
Uninitialized Locals Compile Warning = "Aggressive"
Require Return Values = True
Enable C99 Extensions = False
Enable OpenMP Extensions = False
Stack Size = 250000
Stack Reserve = 1048576
Stack Commit = 4096
Image Base Address = 4194304
Image Base Address x64 = 4194304
Compiler Defines = "/DWIN32_LEAN_AND_MEAN /DWIENVME"
Sign = False
Sign Store = ""
Sign Certificate = ""
Sign Timestamp URL = ""
Sign URL = ""
Manifest Embed = False
Icon File Is Rel = False
Icon File = ""
Application Title = ""
Use IVI Subdirectories for Import Libraries = False
Use VXIPNP Subdirectories for Import Libraries = False
Use Dflt Import Lib Base Name = True
Where to Copy DLL = "Do not copy"
Custom Directory to Copy DLL Is Rel = False
Custom Directory to Copy DLL = ""
Generate Source Documentation = "None"
Runtime Support = "Full Runtime Support"
Runtime Binding = "Shared"
Embed Project .UIRs = False
Generate Map File = False
Embed Timestamp = True
Create Console Application = False
Using LoadExternalModule = False
DLL Exports = "Include File Symbols"
Register ActiveX Server = False
Add Type Lib To DLL = False
Include Type Lib Help Links = False
TLB Help Style = "HLP"
Type Lib FP File Is Rel = False
Type Lib FP File = ""
 
[Compiler Options]
Default Calling Convention = "cdecl"
Require Prototypes = True
Require Return Values = True
Enable Pointer Mismatch Warning = False
Enable Unreachable Code Warning = False
Enable Unreferenced Identifiers Warning = False
Enable Assignment In Conditional Warning = False
O Option Compatible With 5.0 = False
Enable C99 Extensions = False
Uninitialized Locals Compile Warning = "Aggressive"
Precompile Prefix Header = False
Prefix Header File = ""
 
[Run Options]
Stack Size = 250000
Stack Commit = 4096
Image Base Address = 4194304
Image Base Address x64 = 4194304
 
[Compiler Defines]
Compiler Defines = "/DWIN32_LEAN_AND_MEAN /DWIENVME"
 
[Include Paths]
Include Path 1 Is Rel = True
Include Path 1 Rel To = "Project"
Include Path 1 Rel Path = "../../instr/CAENV965"
Include Path 1 = "/c/home/cvi/instr/CAENV965"
 
[Create Executable]
Executable File_Debug Is Rel = True
Executable File_Debug Rel To = "Project"
Executable File_Debug Rel Path = "vmusb.exe"
Executable File_Debug = "/c/home/cvi/apps/petdemo/vmusb.exe"
Executable File_Release Is Rel = True
Executable File_Release Rel To = "Project"
Executable File_Release Rel Path = "vmusb.exe"
Executable File_Release = "/c/home/cvi/apps/petdemo/vmusb.exe"
Executable File_Debug64 Is Rel = True
Executable File_Debug64 Rel To = "Project"
Executable File_Debug64 Rel Path = "vmusb.exe"
Executable File_Debug64 = "/c/home/cvi/apps/petdemo/vmusb.exe"
Executable File_Release64 Is Rel = True
Executable File_Release64 Rel To = "Project"
Executable File_Release64 Rel Path = "vmusb.exe"
Executable File_Release64 = "/c/home/cvi/apps/petdemo/vmusb.exe"
Icon File Is Rel = False
Icon File = ""
Application Title = ""
DLL Exports = "Include File Symbols"
Use IVI Subdirectories for Import Libraries = False
Use VXIPNP Subdirectories for Import Libraries = False
Use Dflt Import Lib Base Name = True
Where to Copy DLL = "Do not copy"
Custom Directory to Copy DLL Is Rel = False
Custom Directory to Copy DLL = ""
Generate Source Documentation = "None"
Add Type Lib To DLL = False
Include Type Lib Help Links = False
TLB Help Style = "HLP"
Type Lib FP File Is Rel = False
Type Lib FP File = ""
Type Lib Guid = ""
Runtime Support = "Full Runtime Support"
Instrument Driver Support Only = False
Embed Project .UIRs = False
Generate Map File = False
 
[External Compiler Support]
UIR Callbacks File Option = 0
Using LoadExternalModule = False
Create Project Symbols File = True
UIR Callbacks Obj File Is Rel = False
UIR Callbacks Obj File = ""
Project Symbols H File Is Rel = False
Project Symbols H File = ""
Project Symbols Obj File Is Rel = False
Project Symbols Obj File = ""
 
[ActiveX Server Options]
Specification File Is Rel = False
Specification File = ""
Source File Is Rel = False
Source File = ""
Include File Is Rel = False
Include File = ""
IDL File Is Rel = False
IDL File = ""
Register ActiveX Server = False
 
[Signing Info]
Sign = False
Sign Debug Build = False
Store = ""
Certificate = ""
Timestamp URL = ""
URL = ""
 
[Manifest Info]
Embed = False
 
[tpcSection]
tpcEnabled = 0
tpcOverrideEnvironment = 0
tpcEnabled x64 = 0
tpcOverrideEnvironment x64 = 0
 
/cvi/apps/petdaq/vmusb_ctrl.c
0,0 → 1,558
#include <formatio.h>
#include "H1D.h"
#include "H2D.h"
#include <utility.h>
#include <ansi_c.h>
#include <cvirte.h>
#include <userint.h>
#include "vmusb_ctrl.h"
#include "daq_cvi.h"
static int p1, p2, p3;
 
 
static int daq_on;
static int plothandle[4]= {0,0,0, 0};
static int tfID;
static int controlID;
static int verbose;
static int timeout;
extern int ctrlcflag;
 
#define MAX_THREADS 10
 
static CmtThreadPoolHandle poolHandle = 0;
 
#define MAXCH 72
float gSum[6];
float gRawSum[6];
float gMax[6];
float gSumCluster[6];
float gNtdata[MAXCH*3];
int gNabove[5];
double gData[MAXCH]; // korigirani ADC ji
double gAdc[MAXCH]; // raw ADC ji
double gPedestals[MAXCH];
double gPeak[MAXCH];
double gPeakScaling;
double gThreshold;
typedef struct Channel {
int ix;
int iy;
int idx;
};
 
struct Channel m_geo_ch[16];
char strbuf[0xFF];
 
int gLog=0;
int printf(const char *format, ...) {
va_list aptr;
int ret;
FILE *flog;
 
va_start(aptr, format);
ret = vsprintf(strbuf, format, aptr);
va_end(aptr);
SetCtrlVal(p1,P1_IO,strbuf);
 
if (gLog) {
flog = fopen ("stdio.log", "a");
fprintf (flog, "%s", strbuf);
fclose (flog);
}
return(ret);
}
 
 
 
int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow) {
if (InitCVIRTE (hInstance, 0, 0) == 0)
return -1; /* out of memory */
if ((p1 = LoadPanel (0, "vmusb_ctrl.uir", P1)) < 0)
return -1;
if ((p2 = LoadPanel (0, "vmusb_ctrl.uir", P2)) < 0)
return -1;
if ((p3 = LoadPanel (0, "vmusb_ctrl.uir", P3)) < 0)
return -1;
SetStdioPort (CVI_STDIO_WINDOW);
SetSleepPolicy(VAL_SLEEP_MORE);
CmtNewThreadPool (MAX_THREADS, &poolHandle);
DisplayPanel (p1);
RunUserInterface ();
DiscardPanel (p1);
DiscardPanel (p2);
DiscardPanel (p3);
return 0;
}
 
static void start_timer (double tout) {
timeout = 0;
SetCtrlAttribute (p1, P1_TIMER, ATTR_INTERVAL, tout);
SetCtrlAttribute (p1, P1_TIMER, ATTR_ENABLED, 1);
}
 
static void stop_timer ( void ) {
SetCtrlAttribute (p1, P1_TIMER, ATTR_ENABLED, 0);
//DRSSetTimeout();
}
 
 
 
 
 
int georead(){
int i;
for (i=0; i<64; i++) {
int row=i+1;
double val;
unsigned short sval;
GetTableCellVal (p3, P3_CGEO, MakePoint (3,row), &sval);
fThreshold[i]=sval;
GetTableCellVal (p3, P3_CGEO, MakePoint (4,row), &val);
gPeak[i]=val;
GetTableCellVal (p3, P3_CGEO, MakePoint (5,row), &val);
gPedestals[i]=val;
}
GetCtrlVal(p3, P3_PEAKSCALING, &gPeakScaling );
GetCtrlVal(p3, P3_GTHRESHOLD, &gThreshold );
 
for (i=0; i<16; i++) {
int row=i+1;
double val;
unsigned short sval, id;
GetTableCellVal (p3, P3_CGEO, MakePoint (1,row), &id);
GetTableCellVal (p3, P3_CGEO, MakePoint (2,row), &sval);
m_geo_ch[id].ix=sval;
GetTableCellVal (p3, P3_CGEO, MakePoint (3,row), &sval);
m_geo_ch[id].iy=sval;
m_geo_ch[id].idx=id;
}
 
return 0;
}
 
void CVICALLBACK EndOfThread ( CmtThreadPoolHandle poolhandle,
CmtThreadFunctionID functionID, unsigned int event,
int value, void *callbackData ) {
 
daq_on=0;
//SetDimming(0);
printf("End of Thread \n");
return ;
 
}
 
 
int CVICALLBACK RefreshGraphs (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2) {
switch (event) {
case EVENT_TIMER_TICK:
// if (!daq_on ) return 0;
case EVENT_COMMIT: {
int ch=0;
int logy=0;
int pmt =0;
int updateplots=0;
GetCtrlVal(p1,P1_RECO, &updateplots);
if (!updateplots) return 0;
GetCtrlVal(p2,P2_PMT, &pmt);
GetCtrlVal(p2,P2_ADC, &ch);
H1D_Draw(10,p2,P2_GRAPHADC,&plothandle[1]);
H2D_Draw(0,p2,P2_GRAPH2D,&plothandle[2]);
 
}
 
break;
 
}
return 0;
}
 
 
 
int vmusb_init(){
 
int range = 2056;
for (int i=0; i<MAXCH; i++) {
char name[0xFF];
sprintf(name,"adc%d", i);
H1D_Init(i, name,name, range, 0 , range);
H1D_SetTitleX(0,"ADC");
H1D_SetTitleY(0,"N");
sprintf(name,"adc%d", i);
sprintf(name,"energy%d", i);
H1D_Init(100+i, name,name, range, 0 , range);
H1D_SetTitleX(0,"Energy");
H1D_SetTitleY(0,"N");
}
 
H2D_Init(0, "cog","Center of grg_peakscalingavity", 256, 0 ,1, 256, 0 ,1);
H2D_SetTitleX(0,"x");
H2D_SetTitleY(0,"y");
return 0;
}
 
double GetEnergy(int ch, int adc){
return (adc-gPedestals[ch])/(gPeak[ch]-gPedestals[ch])*gPeakScaling;
}
 
int FillHistograms() {
 
int npmts = 4;
for (int ipmt=0; ipmt<npmts; ipmt++) { // zanka preko pmtjev
int j2= (ipmt/2)*2+1-ipmt%2; // sosednja fotopomnozevalka
 
float posx[2]= {0,0};
float posy[2]= {0,0};
float sum[2]= {0,0};
float m_threshold =100;
for (int ich=0; ich<16; ich++) { // zanka preko elektronskih kanalov na fotopomnozevalki
int ch= ich+ipmt*16;
if (gMax[ipmt]>m_threshold) {
posx[0]+= gData[ch]*m_geo_ch[ich].ix;
posy[0]+= gData[ch]*m_geo_ch[ich].iy;
sum[0] += gData[ch];
 
if (gData[ch]> 0.2*gMax[ipmt]) { // pri racunanju pozicije upostevaj le kanale, ki imajo vrednost vecjo od ratio*maksimalna na tisti fotopomnozevalki
posx[1]+= gData[ch]*m_geo_ch[ich].ix;
posy[1]+= gData[ch]*m_geo_ch[ich].iy;
sum[1] += gData[ch];
}
}
}
 
if ( sum[0] > 0 ) {
float px=posx[0]/sum[0];
float py=posy[0]/sum[0];
H2D_Fill(0, px,py,1);
}
}
 
 
return 0;
};
 
 
int DecodeData(int n, unsigned int *buf){
int idx=1;
int neve=buf[0]/2;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
for (int nev=0;nev<neve;nev++){
int len=buf[idx];
int sb =buf[idx+1];
unsigned int *pbuf=&buf[idx+2];
if (sb!=0xffab) {
printf("0x%04x!0xffab len=%d\n",sb,len);
break;
}
// postavi na nic
#define InitArrayWithAValue(arr,n,x) {for (int i=0;i<n;i++) arr[i]=x;}
InitArrayWithAValue( gSum , 4 , 0);
InitArrayWithAValue( gRawSum , 4 , 0);
InitArrayWithAValue( gMax , 4 , 0);
InitArrayWithAValue( gSumCluster, 4 , 0);
InitArrayWithAValue( gNabove , 4 , 0);
InitArrayWithAValue( gData , MAXCH, 0);
InitArrayWithAValue( gAdc , MAXCH, 0);
//------------------------------------------------------------
for (int i0=0;i0<len-2;i0+=2) {
int data0 = pbuf[i0];
int data1 = pbuf[i0+1];
int geo = (data1 >> 11) & 0x1f;
int ch = (data1&0x1f) | (geo<<5);
int dtype = (data1>>9)&0x3;
int adc = data0&0xfff;
switch (dtype) {
case 0x0:
if (ch<MAXCH) {
H1D_Fill(ch,adc,1);
int ipmt = ch/16;
gAdc[ch]=adc;
gRawSum[ipmt]+=adc;
if (ch<64) gData[ch]= GetEnergy(ch,adc); else gData[ch]=adc;
H1D_Fill(1+ch,gData[ch],1);
gSum[ipmt]+=gData[ch];
if (gData[ch] >gMax[ipmt] ) gMax[ipmt]= gData[ch];
if (gData[ch] >gThreshold ) gNabove[ipmt]++;
}
break;
case 0x10:
case 0x11:
case 0x01:
break;
}
 
};// for (int i0=0;i0<len-2;i0+=2)
//------------------------------------------------------------
idx+=len+1;
FillHistograms();
} // for (int nev=0;nev<neve;nev++)
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
return 0;
}
int vmusb_daq(){
 
vmusb_init();
// print welcome message
time_t t,told=0, tstart, tstop;
time(&t);
printf("#############################################\n");
printf("Program vmusb version\n");
printf("Compiled on %s %s\n",__DATE__, __TIME__);
printf("Runtime %s \n",ctime(&t));
printf("#############################################\n");
int neve=-1;
char cfname[100]="test.dat";
char fname[0xff];
char fpedname[0xff];
#define BSIZE 10000
uint32_t data[10000];
int oldValue;
//oldValue = SetBreakOnLibraryErrors (0);
daq_init(); /* Function calls that may legitimately return errors. */
//SetBreakOnLibraryErrors (oldValue);
 
int output=0;
GetCtrlVal(p1,P1_OUTPUT, &output);
 
GetCtrlVal(p1,P1_FMASK, fpedname);
int fsize=0;
georead();
 
GetCtrlVal(p1,P1_NEVE, &neve);
// negative argument time ( in s )limited event loop
GetCtrlVal(p1,P1_FNAME, fname);
 
if (GetFileInfo(fname,&fsize)==1) {
printf("Error !\n");
printf( "File %s already exist. Appending ....\n",fname);
//fprintf(stdout,"Remove the file and restart !!!\n");
//exit(0);
}
 
FILE *fp=NULL;
if (output) fp = fopen(fname,"a");
//gzFile fp=gzopen(fname,"a");
init();
clear();
int hdr[4]={2}; // recid od run 11 naprej
int i=0;
int ntotal=0;
int counters[30]={0,0,0,0,0, 0,0,0,0,0,0,0};
char names[10][20]={"TRG","CAEN V965"};
time(&t);
tstart=t;
tstop=tstart+360000;
int evetype=0;
GetCtrlVal(p1,P1_EVE, &evetype);
if (evetype) {
double ntime=0;
GetCtrlVal(p1,P1_NTIME, &ntime);
tstop=tstart+ntime;
neve=-1;
}
int reco=0;
GetCtrlVal(p1,P1_RECO, &reco);
for (i=0;i!=neve && !ctrlcflag && t<tstop;i++){
time(&t);
if (t!=told ) {
printf("%d in %2.2f min daq::event() %s\n",i, (double)(t-tstart)/60., ctime(&t));
GetCtrlVal(p1,P1_RECO, &reco);
RefreshGraphs(p2,P2_PMT,EVENT_COMMIT,NULL,0,0);
}
int nb=event(data,BSIZE, counters,t!=told);
SetCtrlVal(p1,P1_CEVE,i);
if (nb>0){
if (reco) DecodeData(nb, data);
// zapis v datoteko
hdr[1]=nb+4*sizeof(int);
hdr[2]=time(NULL);
hdr[3]=i;
if (fp) fwrite(hdr, sizeof(int),4 , fp);
if (fp) ntotal += fwrite(data, 1,nb, fp);
} else i--;
told=t;
}
 
end();
printf("Number of Events: %d\n",i);
if (ctrlcflag) printf("User Program termination CTRL-C\n");
if (t>tstop ) printf("Timeout termination tstart# t>tstop: %d# %d >%d\n",(int)t, (int)tstart, (int) tstop);
 
if (fp) fclose(fp);
//gzclose(fp);
printf("%d bytes written to %s\nCounts:\n", (int) (ntotal*sizeof(int)),fname);
for (i=0;i<2;i++) printf("%s\t%d\t%d\n",names[i],counters[2*i],counters[2*i+1]) ;
 
 
printf("Usage: vmusb [filename] [number of events] [thresholdfile]\n negative number of events = acq time in seconds\n");
disconnect();
return 0;
}
 
int CVICALLBACK StartCB (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2) {
ThreadFunctionPtr mythread = NULL;
switch (event) {
 
case EVENT_COMMIT:
 
controlID= control;
if (panel == p1 && control == P1_START) {
mythread = vmusb_daq;
}
//if (panel == xyscan && control == SCAN_SCAN) mythread = scan;
if (mythread!=NULL) {
printf("New Thread panel=%d button=%d\n", panel, control);
 
// SetDimming(1);
 
CmtScheduleThreadPoolFunctionAdv (poolHandle, mythread, &controlID,
DEFAULT_THREAD_PRIORITY,
EndOfThread,
EVENT_TP_THREAD_FUNCTION_END,
NULL, RUN_IN_SCHEDULED_THREAD,
&tfID);
}
break;
}
return 0;
}
 
int CVICALLBACK StopCB (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2) {
switch (event) {
case EVENT_COMMIT:
ctrlcflag=1;
break;
}
return 0;
}
 
int CVICALLBACK ExitCB (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2) {
switch (event) {
case EVENT_COMMIT:
QuitUserInterface (0);
break;
}
return 0;
}
 
int CVICALLBACK ShowHistoCB (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2) {
switch (event) {
case EVENT_COMMIT:
DisplayPanel (p2);
break;
}
return 0;
}
 
int CVICALLBACK SetLogZCB (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2) {
switch (event) {
case EVENT_COMMIT:
GetCtrlVal(panel,control, &log);
 
if (log) {
SetCtrlAttribute (p2, P2_GRAPH2D, ATTR_YMAP_MODE, VAL_LOG);
 
} else {
SetCtrlAttribute (p2, P2_GRAPH2D, ATTR_YMAP_MODE, VAL_LINEAR);
}
 
break;
}
return 0;
}
 
int CVICALLBACK SetLogYCB (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2) {
switch (event) {
case EVENT_COMMIT:{
int log=0;
GetCtrlVal(panel,control, &log);
 
if (log) {
SetCtrlAttribute (p2, P2_GRAPHADC, ATTR_YMAP_MODE, VAL_LOG);
 
} else {
SetCtrlAttribute (p2, P2_GRAPHADC, ATTR_YMAP_MODE, VAL_LINEAR);
}
 
}
break;
}
return 0;
}
 
 
int CVICALLBACK ShowMainCB (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2) {
switch (event) {
case EVENT_COMMIT:
DisplayPanel (p1);
break;
}
return 0;
}
 
int CVICALLBACK ShowSettingsCB (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2) {
switch (event) {
case EVENT_COMMIT:
DisplayPanel (p3);
break;
}
return 0;
}
/cvi/apps/petdaq/vmusb_ctrl.h
0,0 → 1,78
/**************************************************************************/
/* LabWindows/CVI User Interface Resource (UIR) Include File */
/* */
/* WARNING: Do not add to, delete from, or otherwise modify the contents */
/* of this include file. */
/**************************************************************************/
 
#include <userint.h>
 
#ifdef __cplusplus
extern "C" {
#endif
 
/* Panels and Controls: */
 
#define P1 1
#define P1_EXIT 2 /* control type: command, callback function: ExitCB */
#define P1_SHOWSETTINGS 3 /* control type: command, callback function: ShowSettingsCB */
#define P1_STOP 4 /* control type: command, callback function: StopCB */
#define P1_START 5 /* control type: command, callback function: StartCB */
#define P1_DX 6 /* control type: numeric, callback function: (none) */
#define P1_X0 7 /* control type: numeric, callback function: (none) */
#define P1_NX 8 /* control type: numeric, callback function: (none) */
#define P1_NTIME 9 /* control type: numeric, callback function: (none) */
#define P1_NEVE 10 /* control type: numeric, callback function: (none) */
#define P1_EVE 11 /* control type: binary, callback function: (none) */
#define P1_SHOWHISTO 12 /* control type: command, callback function: ShowHistoCB */
#define P1_FMASK 13 /* control type: string, callback function: (none) */
#define P1_FNAME 14 /* control type: string, callback function: (none) */
#define P1_OUTPUT 15 /* control type: radioButton, callback function: (none) */
#define P1_RECO 16 /* control type: radioButton, callback function: (none) */
#define P1_CEVE 17 /* control type: numeric, callback function: (none) */
#define P1_IO 18 /* control type: textBox, callback function: (none) */
#define P1_TIMER 19 /* control type: timer, callback function: (none) */
 
#define P2 2
#define P2_GRAPHADC 2 /* control type: graph, callback function: (none) */
#define P2_GRAPH2D 3 /* control type: graph, callback function: (none) */
#define P2_ADC 4 /* control type: numeric, callback function: RefreshGraphs */
#define P2_PMT 5 /* control type: numeric, callback function: RefreshGraphs */
#define P2_LOGZ 6 /* control type: radioButton, callback function: SetLogZCB */
#define P2_LOGY 7 /* control type: radioButton, callback function: SetLogYCB */
#define P2_SHOWMAIN 8 /* control type: command, callback function: ShowMainCB */
 
#define P3 3
#define P3_CGEO_2 2 /* control type: table, callback function: (none) */
#define P3_CGEO 3 /* control type: table, callback function: (none) */
#define P3_SHOWMAIN 4 /* control type: command, callback function: ShowMainCB */
#define P3_GTHRESHOLD 5 /* control type: numeric, callback function: (none) */
#define P3_PEAKSCALING 6 /* control type: numeric, callback function: (none) */
 
 
/* Control Arrays: */
 
/* (no control arrays in the resource file) */
 
 
/* Menu Bars, Menus, and Menu Items: */
 
/* (no menu bars in the resource file) */
 
 
/* Callback Prototypes: */
 
int CVICALLBACK ExitCB(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);
int CVICALLBACK RefreshGraphs(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);
int CVICALLBACK SetLogYCB(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);
int CVICALLBACK SetLogZCB(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);
int CVICALLBACK ShowHistoCB(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);
int CVICALLBACK ShowMainCB(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);
int CVICALLBACK ShowSettingsCB(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);
int CVICALLBACK StartCB(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);
int CVICALLBACK StopCB(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);
 
 
#ifdef __cplusplus
}
#endif
/cvi/apps/petdaq/vmusb_ctrl.uir
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property