From 4304a4bd05c1a420a61c02338135f03a71f9153c Mon Sep 17 00:00:00 2001 From: "carina@hades" Date: Fri, 15 Dec 2023 16:02:46 -0500 Subject: [PATCH] add A4818 support in ClassDigitizer.cpp, not implemented in FSU DAQ --- Aux/test.cpp | 8 +++++--- Aux/test_indep.cpp | 31 +++++++++++++++++-------------- ClassDigitizer.cpp | 20 +++++++++++--------- 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/Aux/test.cpp b/Aux/test.cpp index 18b3b6b..a24a6c4 100644 --- a/Aux/test.cpp +++ b/Aux/test.cpp @@ -27,12 +27,12 @@ int getch(void); //^====================================== int main(int argc, char* argv[]){ - Digitizer * digi = new Digitizer(0, 0, false, true); + Digitizer * digi = new Digitizer(0, 26006, false, true); digi->Reset(); - digi->ProgramBoard_PHA(); + //digi->ProgramBoard_PHA(); - digi->WriteRegister(DPP::SoftwareClear_W, 1); + //digi->WriteRegister(DPP::SoftwareClear_W, 1); // digi->WriteRegister(DPP::QDC::RecordLength, 31, -1); // T = N * 8 * 16 // digi->WriteRegister(DPP::QDC::PreTrigger, 60, -1); @@ -52,6 +52,7 @@ int main(int argc, char* argv[]){ // digi->SetBits(DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::Polarity, 0, -1); + /* digi->SetBits(DPP::BoardConfiguration, DPP::Bit_BoardConfig::EnableExtra2, 1, -1); digi->SetBits(DPP::BoardConfiguration, DPP::Bit_BoardConfig::RecordTrace, 0, -1); @@ -91,6 +92,7 @@ int main(int argc, char* argv[]){ data->PrintAllData(); builder->PrintAllEvent(); // TODO + */ digi->CloseDigitizer(); delete digi; diff --git a/Aux/test_indep.cpp b/Aux/test_indep.cpp index e8da6d3..a557301 100644 --- a/Aux/test_indep.cpp +++ b/Aux/test_indep.cpp @@ -175,7 +175,8 @@ int main(int argc, char* argv[]){ int handle; printf("======== open board\n"); - int ret = CAEN_DGTZ_OpenDigitizer(CAEN_DGTZ_OpticalLink, 1, 0, 0, &handle); + //int ret = CAEN_DGTZ_OpenDigitizer(CAEN_DGTZ_OpticalLink, 1, 0, 0, &handle); + int ret = CAEN_DGTZ_OpenDigitizer(CAEN_DGTZ_USB_A4818, 26006, 0, 0, &handle); CAEN_DGTZ_BoardInfo_t BoardInfo; ret = (int) CAEN_DGTZ_GetInfo(handle, &BoardInfo); @@ -188,11 +189,12 @@ int main(int argc, char* argv[]){ } unsigned int ADCbits = BoardInfo.ADC_NBits; - if( ret != 0 ) { printf("==== open digitizer\n"); return 0;} + if( ret != 0 ) { printf("==== open digitizer fail.\n"); return 0;} ///======= reset ret = CAEN_DGTZ_Reset(handle); + /* printf("======== program board\n"); ///ret |= CAEN_DGTZ_SetDPPAcquisitionMode(handle, CAEN_DGTZ_DPP_ACQ_MODE_List, CAEN_DGTZ_DPP_SAVE_PARAM_EnergyAndTime); @@ -213,12 +215,13 @@ int main(int argc, char* argv[]){ /// Set the I/O level (CAEN_DGTZ_IOLevel_NIM or CAEN_DGTZ_IOLevel_TTL) ret |= CAEN_DGTZ_SetIOLevel(handle, CAEN_DGTZ_IOLevel_NIM); - /** Set the digitizer's behaviour when an external trigger arrives: - CAEN_DGTZ_TRGMODE_DISABLED: do nothing - CAEN_DGTZ_TRGMODE_EXTOUT_ONLY: generate the Trigger Output signal - CAEN_DGTZ_TRGMODE_ACQ_ONLY = generate acquisition trigger - CAEN_DGTZ_TRGMODE_ACQ_AND_EXTOUT = generate both Trigger Output and acquisition trigger - see CAENDigitizer user manual, chapter "Trigger configuration" for details */ + // Set the digitizer's behaviour when an external trigger arrives: + // CAEN_DGTZ_TRGMODE_DISABLED: do nothing + // CAEN_DGTZ_TRGMODE_EXTOUT_ONLY: generate the Trigger Output signal + // CAEN_DGTZ_TRGMODE_ACQ_ONLY = generate acquisition trigger + // CAEN_DGTZ_TRGMODE_ACQ_AND_EXTOUT = generate both Trigger Output and acquisition trigger + // see CAENDigitizer user manual, chapter "Trigger configuration" for details + ret |= CAEN_DGTZ_SetExtTriggerInputMode(handle, CAEN_DGTZ_TRGMODE_ACQ_ONLY); if( ret != 0 ) { printf("==== CAEN_DGTZ_SetExtTriggerInputMode.\n"); return 0;} @@ -232,8 +235,8 @@ int main(int argc, char* argv[]){ //if( ret != 0 ) { printf("==== CAEN_DGTZ_SetDPPEventAggregation. %d\n", ret); return 0;} - /** Set the mode used to syncronize the acquisition between different boards. - In this example the sync is disabled */ + // Set the mode used to syncronize the acquisition between different boards. + // In this example the sync is disabled ret = CAEN_DGTZ_SetRunSynchronizationMode(handle, CAEN_DGTZ_RUN_SYNC_Disabled); if( ret != 0 ) { printf("==== set board error.\n"); return 0;} @@ -464,14 +467,14 @@ int main(int argc, char* argv[]){ } nw++; }while(true); - + */ printf("=========== close Digitizer \n"); CAEN_DGTZ_SWStopAcquisition(handle); CAEN_DGTZ_CloseDigitizer(handle); - CAEN_DGTZ_FreeReadoutBuffer(&buffer); - CAEN_DGTZ_FreeDPPEvents(handle, reinterpret_cast(&Events)); - CAEN_DGTZ_FreeDPPWaveforms(handle, Waveform); + //CAEN_DGTZ_FreeReadoutBuffer(&buffer); + //CAEN_DGTZ_FreeDPPEvents(handle, reinterpret_cast(&Events)); + //CAEN_DGTZ_FreeDPPWaveforms(handle, Waveform); return 0; } diff --git a/ClassDigitizer.cpp b/ClassDigitizer.cpp index 1933794..19d276b 100644 --- a/ClassDigitizer.cpp +++ b/ClassDigitizer.cpp @@ -86,17 +86,19 @@ int Digitizer::OpenDigitizer(int boardID, int portID, bool program, bool verbose if( verbose) printf("============= Opening Digitizer at Board %d, Port %d \n", boardID, portID); ///-------- try USB first - LinkType = CAEN_DGTZ_USB; /// Link Type - ret = (int) CAEN_DGTZ_OpenDigitizer(LinkType, boardID, 0, VMEBaseAddress, &handle); - if (ret != 0){ ///---------- try Optical link - LinkType = CAEN_DGTZ_OpticalLink ; + if( portID < 4){ + LinkType = CAEN_DGTZ_USB; /// Link Type + ret = (int) CAEN_DGTZ_OpenDigitizer(LinkType, boardID, 0, VMEBaseAddress, &handle); + if (ret != 0){ ///---------- try Optical link + LinkType = CAEN_DGTZ_OpticalLink ; + ret = (int) CAEN_DGTZ_OpenDigitizer(LinkType, portID, boardID, VMEBaseAddress, &handle); + } + ErrorMsg("=== Open Digitizer port " +std::to_string(portID) + " board " + std::to_string(boardID)); + }else{ + LinkType = CAEN_DGTZ_USB_A4818 ; // portID = A4818 PID ret = (int) CAEN_DGTZ_OpenDigitizer(LinkType, portID, boardID, VMEBaseAddress, &handle); + ErrorMsg("=== Open Digitizer port " +std::to_string(portID) + " board " + std::to_string(boardID) + " using A4818."); } - if (ret != 0){ ///---------- try A4818 - LinkType = CAEN_DGTZ_USB_A4818 ; - ret = (int) CAEN_DGTZ_OpenDigitizer(LinkType, portID, boardID, VMEBaseAddress, &handle); - } - ErrorMsg("=== Open Digitizer port " +std::to_string(portID) + " board " + std::to_string(boardID)); if( ret == 0 ){ if( LinkType == CAEN_DGTZ_USB ) printf("Open digitizer via USB, board : %d\n", boardID);