// // calibrate2277.c // // Description : calibration program for 2277 // // Author : R. Pestotnik // Date : 2004/06/25 #include "camlib.h" #include #include #include #include #include #include #include #include #include #include #include //#include "defines.h" #define TIMEOUT 60 int sreg=0x0F0; int ctrlc=0; int print=1; int sn=1; void CatchSig (int i) { ctrlc = 1; } int camac_event(int maxlength,char *buf) { int status, i, q, x; int count; int flag; int data; int nhits=0; int *bdata= (int*) buf; int *rawtdc=&bdata[1]; /* main */ CAMAC(NAF(sn, 0, 9), &i, &q, &x); CAMAC(NAF(sn, 0, 26), &i, &q, &x); /* while(!ctrlc){ count = 0; // Wait LAM for CAMAC status = CAM_WaitLAM(TIMEOUT); if( status != 0 ) printf( "Timeout! status = %d\n", status ); } */ while (!ctrlc){ CAMAC(NAF(sn, 0, 8), &i, &q, &x); if ( q == 1 ) break; } while (!ctrlc){ CAMAC(NAF(sn, 0, 27), &i, &q, &x); if ( q == 0 ) break; } // read data nhits= 0; while(!ctrlc && nhits < maxlength-1 ) { CAMAC(NAF(sn, 0, 0), &data, &q, &x); if ( q == 0 ) break; rawtdc[nhits] = data; if (print) printf("data=%d \tE=%d\t ch=%d\n",data&0xFFFF,(data >> 16 ) &0x1,(data >> 17 ) &0x1F ); nhits++; } if (nhits>0) bdata[0]=nhits; return nhits; } int main(int argc,char **argv){ int status,q,x; int i, dum,count; FILE *fp; int maxev; #define MAXDATA 10000 char data[MAXDATA]; if (argc<4) { printf("Usage: %s \n", argv[0]); printf("CAMAC TDC LC 2277 calibration program\n"); printf("TDC MODE STOP: Provide trigger COM and test pulse TEST\n"); exit(0); } // intercept routine if (signal (SIGINT, CatchSig) == SIG_ERR) perror ("sigignore"); fp=fopen(argv[2],"w"); if (!fp) { printf("cannot open file %s\n",argv[2]); exit(-2); } sn=atoi(argv[3]); maxev=atoi(argv[1]); status = CAMOPN(); if (status) { printf("cannot open CAMAC status=%d\n",status); exit(status); } CSETCR(0); CGENZ(); CGENC(); CREMI(); // Enable LAM status = CAM_EnableLAM(1<<(sn-1)); if ( status ) { printf("cannot Enable LAM=%d\n",status); exit(status); } CAMAC(NAF(sn,0,17), &sreg, &q, &x ); // set status register for TDC2277 CAMAC(NAF(sn, 0, 1), &dum, &q, &x); if (sreg!=dum) { printf("CSR error\n"); exit(1); } for(count=0;count0) fwrite(data,MAXDATA,1,fp); if (count%1000 ==0 ) printf ("Nevents: %d\n",count); count++; } CAM_DisableLAM(); CAM_Close(); fclose(fp); return 0; }