27 #define MaxNChannels 8
33 #include "Functions.h"
53 printf(
"ERROR: can't reset the digitizer.\n");
182 printf(
"Warning: errors found during the programming of the digitizer.\nSome settings may not be executed\n");
192 int main(
int argc,
char *argv[])
229 uint32_t AllocatedSize, BufferSize;
234 uint64_t CurrentTime, PrevRateTime, ElapsedTime;
247 for(b=0; b<
MAXNB; b++) {
249 EHistoShort[b][ch] = NULL;
250 EHistoLong[b][ch] = NULL;
251 EHistoRatio[b][ch] = NULL;
287 DPPParams[b].
thr[ch] = 50;
296 DPPParams[b].
nsbl[ch] = 2;
297 DPPParams[b].
lgate[ch] = 32;
298 DPPParams[b].
sgate[ch] = 24;
299 DPPParams[b].
pgate[ch] = 8;
303 DPPParams[b].
selft[ch] = 1;
309 DPPParams[b].
tvaw[ch] = 50;
311 DPPParams[b].
csens[ch] = 0;
317 DPPParams[b].
purgap = 100;
318 DPPParams[b].
blthr = 3;
319 DPPParams[b].
bltmo = 100;
320 DPPParams[b].
trgho = 8;
328 for(b=0; b<
MAXNB; b++) {
349 printf(
"Can't open digitizer\n");
356 printf(
"Can't read board info\n");
359 printf(
"\nConnected to CAEN Digitizer Model %s, recognized as board %d\n", BoardInfo.
ModelName, b);
365 if (MajorNumber != 131 && MajorNumber != 132 ) {
366 printf(
"This digitizer has not a DPP-PSD firmware\n");
374 for(b=0; b<
MAXNB; b++) {
377 printf(
"Failed to program the digitizer\n");
392 printf(
"Can't allocate memory buffers\n");
401 for(b=0; b<
MAXNB; b++) {
404 EHistoShort[b][ch] = (uint32_t *)malloc( (1<<MAXNBITS)*
sizeof(uint32_t) );
405 memset(EHistoShort[b][ch], 0, (1<<MAXNBITS)*
sizeof(uint32_t));
406 EHistoLong[b][ch] = (uint32_t *)malloc( (1<<MAXNBITS)*
sizeof(uint32_t) );
407 memset(EHistoLong[b][ch], 0, (1<<MAXNBITS)*
sizeof(uint32_t));
408 EHistoRatio[b][ch] = (
float *)malloc( (1<<MAXNBITS)*
sizeof(float) );
409 memset(EHistoRatio[b][ch], 0, (1<<MAXNBITS)*
sizeof(
float));
413 ExtendedTT[b][ch] = 0;
419 printf(
"Type a command: ");
426 if (c==
'q') Quit = 1;
428 for(b=0; b<
MAXNB; b++)
431 for(b=0; b<
MAXNB; b++)
433 if( ECnt[b][ch] != 0) {
439 for(b=0; b<
MAXNB; b++)
441 DoSaveWave[b][ch] = 1;
443 for(b=0; b<
MAXNB; b++) {
451 for(b=0; b<
MAXNB; b++) {
456 printf(
"Acquisition Started for Board %d\n", b);
461 for(b=0; b<
MAXNB; b++) {
464 printf(
"Acquisition Stopped for Board %d\n", b);
476 ElapsedTime = CurrentTime - PrevRateTime;
477 if (ElapsedTime > 1000) {
480 printf(
"Readout Rate=%.2f MB\n", (
float)Nb/((
float)ElapsedTime*1048.576f));
481 for(b=0; b<
MAXNB; b++) {
482 printf(
"\nBoard %d:\n",b);
485 printf(
"\tCh %d:\tTrgRate=%.2f KHz\t%\n", b*8+i, (
float)TrgCnt[b][i]/(
float)ElapsedTime);
487 printf(
"\tCh %d:\tNo Data\n", i);
492 PrevRateTime = CurrentTime;
497 for(b=0; b<
MAXNB; b++) {
501 printf(
"Readout Error\n");
511 printf(
"Data Error: %d\n", ret);
517 if (!(Params[b].ChannelMask & (1<<ch)))
521 for(ev=0; ev<NumEvents[ch]; ev++) {
524 if (Events[ch][ev].TimeTag < PrevTime[b][ch])
526 PrevTime[b][ch] = Events[ch][ev].
TimeTag;
528 if ( (Events[ch][ev].ChargeLong > 0) && (Events[ch][ev].ChargeShort > 0)) {
530 EHistoShort[b][ch][(Events[ch][ev].
ChargeShort) & BitMask]++;
531 EHistoLong[b][ch][(Events[ch][ev].
ChargeLong) & BitMask]++;
539 uint8_t *DigitalWaveLine;
543 size = (int)(Waveform->
Ns);
544 WaveLine = Waveform->
Trace1;
547 WaveLine = Waveform->
Trace2;
549 DoSaveWave[b][ch] = 0;
551 DigitalWaveLine = Waveform->
DTrace1;
553 DoSaveWave[b][ch] = 0;
555 DigitalWaveLine = Waveform->
DTrace2;
557 DoSaveWave[b][ch] = 0;
559 DigitalWaveLine = Waveform->
DTrace3;
561 DoSaveWave[b][ch] = 0;
563 DigitalWaveLine = Waveform->
DTrace4;
565 DoSaveWave[b][ch] = 0;
566 printf(
"Waveforms saved to 'Waveform_<board>_<channel>_<trace>.txt'\n");
576 for(b=0; b<
MAXNB; b++) {
580 free(EHistoShort[b][ch]);
581 free(EHistoLong[b][ch]);
582 free(EHistoRatio[b][ch]);