83 #define S_V1724_ODB_STR "\
85 VME base = DWORD : 0x32100000\n\
87 waveform length = DWORD : 32\n\
88 acquisition mode = BYTE : 1\n\
89 software trigger mode = BYTE : 0\n\
90 hardware trigger mode = BYTE : 0\n\
91 trigger edge (0-ris 1-fal) = BYTE : 1\n\
92 down sampling factor = INT : 1\n\
93 ROC firmware = STRING : [128] -\n\
94 AMC firmware = STRING : [128] -\n\
98 DC offset = DWORD : 0\n\
99 self-trigger mode = BYTE : 0\n\
100 trigger threshhold = DWORD : 0\n\
103 enabled = BOOL : y\n\
104 DC offset = DWORD : 0\n\
105 self-trigger mode = BYTE : 1\n\
106 trigger threshhold = DWORD : 0\n\
109 enabled = BOOL : y\n\
110 DC offset = DWORD : 0\n\
111 self-trigger mode = BYTE : 1\n\
112 trigger threshhold = DWORD : 0\n\
115 enabled = BOOL : y\n\
116 DC offset = DWORD : 0\n\
117 self-trigger mode = BYTE : 1\n\
118 trigger threshhold = DWORD : 0\n\
121 enabled = BOOL : y\n\
122 DC offset = DWORD : 0\n\
123 self-trigger mode = BYTE : 1\n\
124 trigger threshhold = DWORD : 0\n\
127 enabled = BOOL : y\n\
128 DC offset = DWORD : 0\n\
129 self-trigger mode = BYTE : 1\n\
130 trigger threshhold = DWORD : 0\n\
133 enabled = BOOL : y\n\
134 DC offset = DWORD : 0\n\
135 self-trigger mode = BYTE : 1\n\
136 trigger threshhold = DWORD : 0\n\
139 enabled = BOOL : y\n\
140 DC offset = DWORD : 0\n\
141 self-trigger mode = BYTE : 1\n\
142 trigger threshhold = DWORD : 0\n\
151 for (
int iboard=0; iboard<
NBOARDS; iboard++)
155 if(status==DB_NO_KEY || status==DB_STRUCT_MISMATCH)
158 printf(
"Creating key with status: %d \n",status);
160 else if (status==DB_INVALID_HANDLE)
162 printf(
"Error: Cannot connect to database to setup CAEN V1724");
167 status = db_find_key(
hDB,0,str,&hKey);
168 status = db_open_record(
hDB, hKey, &(S_V1724_ODB[iboard]),
sizeof(S_V1724_ODB[0]), MODE_READ, NULL, NULL);
171 printf(
"Opening CAEN VME interface ...");
178 for (
int iboard=0; iboard<
NBOARDS; iboard++)
181 if ( !S_V1724_ODB[iboard].
enabled )
continue;
190 cm_msg(MERROR,
"v1724_init",
"Can't open digitizer at address 0x%08x\n",S_V1724_ODB[iboard].vme_base);
197 cm_msg(MERROR,
"v1724_init",
"Cannot get board info. Error 0x%08x\n",ret);
200 printf(
"\nConnected to CAEN Digitizer Model %s, recognized as board %d\n", BoardInfo[iboard].ModelName, iboard);
201 printf(
"\tROC FPGA Release is %s\n", BoardInfo[iboard].ROC_FirmwareRel);
202 printf(
"\tAMC FPGA Release is %s\n", BoardInfo[iboard].AMC_FirmwareRel);
207 cm_msg(MERROR,
"v1724_init",
"Cannot reset the board. Error 0x%08x\n",ret);
214 cm_msg(MERROR,
"v1724_init",
"Cannot get board info. Error 0x%08x\n",ret);
225 cm_msg(MERROR,
"v1724_init",
"Cannot configure data buffers. Error 0x%08x\n",ret);
236 cm_msg(MERROR,
"v1724_init",
"Cannot configure data buffers for BLT readout. Error 0x%08x\n",ret);
247 cm_msg(MERROR,
"v1724_init",
"Cannot MallocReadoutBuffer. Error 0x%08x\n",ret);
260 cm_msg(MERROR,
"v1724_init",
"Cannot allocate memory for data buffers.\n");
270 cm_msg(MERROR,
"v1724_init",
"Cannot read register 0x8100. Error 0x%08x\n",ret);
273 printf(
"Acquisition control register is: %d\n", mydata);
278 cm_msg(MERROR,
"v1724_init",
"Cannot write register 0x8100. Error 0x%08x\n",ret);
284 cm_msg(MERROR,
"v1724_init",
"Cannot read register 0x8100. Error 0x%08x\n",ret);
287 printf(
"2nd time Acquisition control register is: %d\n", mydata);
295 printf(
"The down sampling factor currently is: 0x%08x\n", mydata);
300 cm_msg(MERROR,
"v1724_init",
"Cannot write register 0x8128. Error 0x%08x\n",ret);
309 printf(
"The down sampling factor currently is: 0x%08x\n", mydata);
324 for (
int iboard=0; iboard<
NBOARDS; iboard++)
327 if ( !S_V1724_ODB[iboard].
enabled )
continue;
335 cm_msg(MERROR,
"v1724_exit",
"Cannot FreeReadoutBuffer. Error 0x%08x\n",ret);
344 cm_msg(MERROR,
"v1724_exit",
"Cannot CloseDigitizer. Error 0x%08x\n",ret);
358 for (
int iboard=0; iboard<
NBOARDS; iboard++)
361 if ( !S_V1724_ODB[iboard].
enabled )
continue;
369 cm_msg(MERROR,
"v1724_init",
"Cannot reset the board. Error 0x%08x\n",ret);
376 uint32_t channel_mask = 0x0;
377 for (uint32_t ichan=0; ichan<8; ichan++)
379 if ( S_V1724_ODB[iboard].ch[ichan].enabled )
380 channel_mask |= (1 << ichan);
382 printf(
"channel enable mask: 0x%08x\n",channel_mask);
386 cm_msg(MERROR,
"v1724_init",
"Cannot Enable channels. Error 0x%08x\n",ret);
397 cm_msg(MERROR,
"v1724_init",
"Cannot configure Acquisition Control. Error 0x%08x\n",ret);
410 cm_msg(MERROR,
"v1724_init",
"Cannot SetRecordLength. Error 0x%08x\n",ret);
419 uint32_t self_trigger_mask = 0x0;
420 for (uint32_t ichan=0; ichan<8; ichan++)
423 self_trigger_mask |= (1 << ichan);
425 printf(
"self-trigger DISABLED mask: 0x%08x\n",channel_mask);
429 cm_msg(MERROR,
"v1724_init",
"Cannot SetCahnngelSelfTrigger. Error 0x%08x\n",ret);
434 self_trigger_mask = 0x0;
435 for (uint32_t ichan=0; ichan<8; ichan++)
438 self_trigger_mask |= (1 << ichan);
440 printf(
"self-trigger ACQ_ONLY mask: 0x%08x\n",channel_mask);
444 cm_msg(MERROR,
"v1724_init",
"Cannot SetCahnngelSelfTrigger. Error 0x%08x\n",ret);
450 self_trigger_mask = 0x0;
451 for (uint32_t ichan=0; ichan<8; ichan++)
454 self_trigger_mask |= (1 << ichan);
456 printf(
"self-trigger EXTOUT_ONLY mask: 0x%08x\n",channel_mask);
460 cm_msg(MERROR,
"v1724_init",
"Cannot SetCahnngelSelfTrigger. Error 0x%08x\n",ret);
466 self_trigger_mask = 0x0;
467 for (uint32_t ichan=0; ichan<8; ichan++)
470 self_trigger_mask |= (1 << ichan);
472 printf(
"self-trigger ACQ_AND_EXTOUT mask: 0x%08x\n",channel_mask);
476 cm_msg(MERROR,
"v1724_init",
"Cannot SetCahnngelSelfTrigger. Error 0x%08x\n",ret);
485 if ( trigger_edge == 0 )
491 cm_msg(MERROR,
"v1724_init",
"Cannot SetTriggerPolarity. Error 0x%08x\n",ret);
498 for (uint32_t ichan=0; ichan<8; ichan++)
503 cm_msg(MERROR,
"v1724_init",
"Cannot SetChannelTriggerThreshold. Error 0x%08x\n",ret);
512 for (uint32_t ichan=0; ichan<8; ichan++)
514 uint32_t addr = V1724_BASE[iboard]+0x1084 + 0x100*ichan;
518 cm_msg(MERROR,
"v1724_init",
"Cannot Set the number of samples over threshold for trigger. Error 0x%08x\n",ret);
531 cm_msg(MERROR,
"v1724_init",
"Cannot SetPostTriggerSize. Error 0x%08x\n",ret);
539 for (uint32_t ichan=0; ichan<8; ichan++)
544 cm_msg(MERROR,
"v1724_init",
"Cannot SetChannelDCOffset. Error 0x%08x\n",ret);
553 for (uint32_t ichan=0; ichan<8; ichan++)
560 cm_msg(MERROR,
"v1724_init",
"Cannot SetChannelPulsePolarity. Error 0x%08x\n",ret);
570 for (uint32_t ichan=0; ichan<8; ichan++)
575 cm_msg(MERROR,
"v1724_init",
"Cannot SetChannelZSParams. Error 0x%08x\n",ret);
587 cm_msg(MERROR,
"v1724_init",
"Cannot SetZeroSuppressionMode. Error 0x%08x\n",ret);
598 cm_msg(MERROR,
"v1724_init",
"Cannot clear CAEN data buffers. Error 0x%08x\n",ret);
608 cm_msg(MERROR,
"v1724_init",
"Cannot CAEN_DGTZ_SWStartAcquisition. Error 0x%08x\n",ret);
622 cm_msg(MERROR,
"v1724_init",
"Cannot read from register 0x8000. Error 0x%08x\n",ret);
628 printf(
"channel configuration register 0x8000: %0x08x\n",data);
632 cm_msg(MERROR,
"v1724_init",
"Cannot write to register 0x8000. Error 0x%08x\n",ret);
645 for (
int iboard=0; iboard<
NBOARDS; iboard++)
648 if ( !S_V1724_ODB[iboard].
enabled )
continue;
656 cm_msg(MERROR,
"v1724_init",
"Cannot CAEN_DGTZ_SWStopAcquisition. Error 0x%08x\n",ret);
665 printf(
"Read out data from digitizer(s)\n");
678 for (
int iboard=0; iboard<
NBOARDS; iboard++)
681 if ( !S_V1724_ODB[iboard].
enabled )
continue;
683 sprintf(bk_name,
"CDG%i", iboard);
684 bk_create(pevent, bk_name, TID_BYTE, &pdata);
685 if (
data_size[iboard] > MAX_EVENT_SIZE/2 )
687 cm_msg(MERROR,
"v1724_read",
"Event size is too large. Truncating data...\n");
692 bk_close(pevent, pdata);
705 for (
int iboard=0; iboard<
NBOARDS; iboard++)
707 if ( !S_V1724_ODB[iboard].
enabled )
continue;
714 cm_msg(MERROR,
"v1724_readout",
"Cannot read register 0x812C. Error 0x%08x\n",ret);
725 uint32_t caen_data_size;
729 cm_msg(MERROR,
"v1724_readout",
"Cannot DGTZ_ReadData. Error 0x%08x\n",ret);
736 printf(
"numEvents: %i\n", numEvents);