From 0a6f866f7a4857ffdd5d1f584d86dc28cd44cc00 Mon Sep 17 00:00:00 2001 From: "carina@hades" Date: Fri, 12 Aug 2022 18:13:54 -0400 Subject: [PATCH] also save TRG-OUT setting, change PHA default channel setting --- ClassDigitizer.cpp | 67 +++++++++++++++++++++++++++++----------------- DigitizerPHA.cpp | 39 ++++++++++++++------------- test.cpp | 26 +++++++++++++++--- 3 files changed, 86 insertions(+), 46 deletions(-) diff --git a/ClassDigitizer.cpp b/ClassDigitizer.cpp index 8d8dfce..3dc18d3 100644 --- a/ClassDigitizer.cpp +++ b/ClassDigitizer.cpp @@ -234,6 +234,7 @@ void Digitizer::ErrorMsg(string header){ int Digitizer::ProgramBoard(){ + printf("----- program Board\n"); ret = CAEN_DGTZ_Reset(handle); if (ret) { printf("ERROR: can't reset the digitizer.\n"); @@ -291,7 +292,7 @@ void Digitizer::StartACQ(){ ErrorMsg("Start ACQ"); return; } - printf("Acquisition Started for Board %d\n", boardID); + printf("\e[1m\e[33m======= Acquisition Started for Board %d\e[0m\n", boardID); AcqRun = true; } @@ -339,17 +340,27 @@ void Digitizer::ReadData(){ printf(" extracted %d events in ch-%02d\n", NumEvents[i], i); } ErrorMsg("GetDPPEvents"); + + FILE * haha = fopen("output.bin", "w+"); + + fwrite(buffer, BufferSize, 1, haha); + fclose(haha); + } //=========================================================== void Digitizer::WriteRegister(uint32_t address, uint32_t value, int ch ){ - /// only for channel setting. - if( ch < 0 ) { - ret = CAEN_DGTZ_WriteRegister(handle, address + 0x7000, value); - for( int i = 0; i < NChannel; i++) EditByte(value, address + (i << 8)); + if( address < 0x8000){ + ///printf("0x%x, 0x%x=%u, ch:%d\n", address, value, value, ch); + if( ch < 0 ) { + ret = CAEN_DGTZ_WriteRegister(handle, address + 0x7000, value); + for( int i = 0; i < NChannel; i++) EditByte(value, address + (i << 8)); + }else{ + ret = CAEN_DGTZ_WriteRegister(handle, address + (ch<<8), value); + EditByte( value, address + (ch<<8) ); + } }else{ - ret = CAEN_DGTZ_WriteRegister(handle, address + (ch<<8), value); - EditByte( value, address + (ch<<8) ); + ret = CAEN_DGTZ_WriteRegister(handle, address, value); } ErrorMsg("WriteRegister"); } @@ -378,16 +389,14 @@ void Digitizer::SetChannelMask(uint32_t mask){ } void Digitizer::SetRecordLength(unsigned int ns, int ch){ - int ch_coupled = ch + int(pow(-1, ch)); WriteRegister( Register::DPP::RecordLength_G, ns / ch2ns / 8 , ch); - WriteRegister( Register::DPP::RecordLength_G, ns / ch2ns / 8 , ch_coupled); + if( ch >= 0 ) WriteRegister( Register::DPP::RecordLength_G, ns / ch2ns / 8 , ch + int(pow(-1, ch))); ErrorMsg("SetRecordLength"); } void Digitizer::SetEventAggregation(unsigned int numEvent, int ch){ - int ch_coupled = ch + int(pow(-1, ch)); WriteRegister( Register::DPP::NumberEventsPerAggregate_G,numEvent, ch); - WriteRegister( Register::DPP::NumberEventsPerAggregate_G,numEvent, ch_coupled); + if( ch >= 0 ) WriteRegister( Register::DPP::NumberEventsPerAggregate_G,numEvent, ch + int(pow(-1, ch))); ErrorMsg("SetEventAggregation"); } void Digitizer::SetInputDynamicRange(unsigned int TwoVol_0_or_halfVol_1, int ch){ WriteRegister( Register::DPP::InputDynamicRange, TwoVol_0_or_halfVol_1, ch); ErrorMsg("SetInputDynamicRange");} @@ -454,11 +463,15 @@ void Digitizer::SetDPPAlgorithmControl(uint32_t bit, int ch){ } void Digitizer::SetBits(uint32_t address, unsigned int bitValue, unsigned int bitLength, unsigned int bitSmallestPos, int ch){ + ///printf("address : 0x%x, value : 0x%x, len : %d, pos : %d, ch : %d \n", address, bitValue, bitLength, bitSmallestPos, ch); uint32_t bit ; - uint32_t bitmask = (uint(pow(2, bitLength)-1) << bitSmallestPos); - if (ch < 0 ) ch = 0; /// take ch-0 - bit = ReadRegister(address, ch); + uint32_t bitmask = (uint(pow(2, bitLength)-1) << bitSmallestPos); + int tempCh = ch; + if (ch < 0 && address < 0x8000 ) tempCh = 0; /// take ch-0 + bit = ReadRegister(address, tempCh); + ///printf("bit : 0x%x, bitmask : 0x%x \n", bit, bitmask); bit = (bit & ~bitmask) | (bitValue << bitSmallestPos); + ///printf("bit : 0x%x, ch : %d \n", bit, ch); WriteRegister(address, bit, ch); if( ret != 0 ) ErrorMsg("SetBits"); } @@ -584,17 +597,21 @@ void Digitizer::CreateAndSaveSettingBinary(string fileName){ settingFileExist = true; ///Save board setting - EditByteByRegister(Register::DPP::BoardConfiguration); - EditByteByRegister(Register::DPP::GlobalTriggerMask); - EditByteByRegister(Register::DPP::ChannelEnableMask); - EditByteByRegister(Register::DPP::ROM_BoardVersion); - EditByteByRegister(Register::DPP::ROM_BoardFromFactor); - EditByteByRegister(Register::DPP::ROM_BoardIDByte1); - EditByteByRegister(Register::DPP::ROM_BoardIDByte0); - EditByteByRegister(Register::DPP::ROM_BoardSerialNumByte1); - EditByteByRegister(Register::DPP::ROM_BoardSerialNumByte0); - EditByteByRegister(Register::DPP::ROCFPGAFirmwareRevision); - EditByteByRegister(Register::DPP::BoardInfo); + EditByteByRegister(Register::DPP::BoardConfiguration); /// 0x8000 + EditByteByRegister(Register::DPP::GlobalTriggerMask); /// 0x810C + EditByteByRegister(Register::DPP::ChannelEnableMask); /// 0x8120 + EditByteByRegister(Register::DPP::FrontPanelTRGOUTEnableMask); /// 0x8110 + EditByteByRegister(Register::DPP::FrontPanelIOControl); /// 0x811C + EditByteByRegister(Register::DPP::DisableExternalTrigger); /// 0x817C + EditByteByRegister(Register::DPP::TriggerValidationMask); /// 0x8180 + EditByteByRegister(Register::DPP::ROM_BoardVersion); /// 0xF030 + EditByteByRegister(Register::DPP::ROM_BoardFromFactor); /// 0xF034 + EditByteByRegister(Register::DPP::ROM_BoardIDByte1); /// 0xF038 + EditByteByRegister(Register::DPP::ROM_BoardIDByte0); /// 0xF03C + EditByteByRegister(Register::DPP::ROM_BoardSerialNumByte1); /// 0xF080 + EditByteByRegister(Register::DPP::ROM_BoardSerialNumByte0); /// 0xF084 + EditByteByRegister(Register::DPP::ROCFPGAFirmwareRevision); /// 0x8124 + EditByteByRegister(Register::DPP::BoardInfo); /// 0x8140 ///================ channel settings for( int ch = 0; ch < NChannel ; ch++){ diff --git a/DigitizerPHA.cpp b/DigitizerPHA.cpp index 5407b7b..073708b 100644 --- a/DigitizerPHA.cpp +++ b/DigitizerPHA.cpp @@ -13,8 +13,8 @@ DigitizerPHA::~DigitizerPHA(){ } int DigitizerPHA::ProgramBoard(){ - printf("program board and channels\n"); - Digitizer::ProgramBoard(); + Digitizer::ProgramBoard(); + printf("----- program PHA\n"); /// Set trigger propagation /// Set analog probe 1 to input /// Set analog probe 2 to Tranpedoiz - Baseline @@ -30,31 +30,33 @@ int DigitizerPHA::ProgramBoard(){ SetRecordLength(2000); SetPreTriggerDuration(500); - SetBaselineSampling(0x11); + SetBaselineSampling(5); SetDCOffset(0.2); - SetInputDynamicRange(1); + SetInputDynamicRange(0); SetPulsePolarity(0); - SetTriggerThreshold(200); + SetTriggerThreshold(100); SetTriggerHoldOff(480); SetTriggerSmoothingFactor(2); - SetTriggerOutputWidth(50); + SetTriggerOutputWidth(0); SetInputRiseTime(96); - SetTrapezoidRescaling(31); + SetTrapezoidRescaling(19); SetTrapezoidRiseTime(200); SetTrapezoidFlatTop(50); - SetDecayTime(10000); - SetPeakingTime(50); - SetPeakingHoldOff(1000); + SetDecayTime(3125); + SetPeakingTime(5); + SetPeakingHoldOff(62); SetPeakSampling(2); SetEnergyFineGain(1); - SetRiseTimeValidWindow(10); + SetRiseTimeValidWindow(0); SetEventAggregation(0); SetRollOverFlag(1); SetPileUpFlag(1); SetExtra2WordOption(2); + + //WriteRegister(Register::DPP::DPPAlgorithmControl, 0xc300013); ErrorMsg("PHA-ProgramBoard"); printf("End of program board and channels\n"); @@ -69,14 +71,14 @@ void DigitizerPHA::SetTimeStampRecording(bool OnOff) { SetBits(Register::DPP::Bo void DigitizerPHA::SetEnergyRecording(bool OnOff) { SetBits(Register::DPP::BoardConfiguration, OnOff, 1, 19); ErrorMsg("PHA-SetEnergyRecording");} void DigitizerPHA::SetVirtualProbe1(unsigned int bit){ SetBits(Register::DPP::BoardConfiguration, bit, 4, 20); ErrorMsg("PHA-SetVirtualProbe1"); } -void DigitizerPHA::SetTrapezoidRescaling(unsigned int rightShiftBits, int ch ){ SetBits(Register::DPP::DPPAlgorithmControl, rightShiftBits, 5, 0, ch); ErrorMsg("SetTrapezoidRescaling"); } -void DigitizerPHA::SetPeakSampling(unsigned int bit, int ch) { SetBits(Register::DPP::DPPAlgorithmControl, bit, 2, 12, ch); ErrorMsg("SetPeakSampling");} -void DigitizerPHA::SetPulsePolarity(bool PositiveIsZero, int ch) { SetBits(Register::DPP::DPPAlgorithmControl, PositiveIsZero, 1, 16, ch); ErrorMsg("SetPulsePolarity");} -void DigitizerPHA::SetBaselineSampling(unsigned int bit, int ch) { SetBits(Register::DPP::DPPAlgorithmControl, bit, 3, 20, ch); ErrorMsg("SetBaselineSampling"); } -void DigitizerPHA::SetRollOverFlag(bool isRollOver, int ch) { SetBits(Register::DPP::DPPAlgorithmControl, isRollOver, 1, 26, ch); ErrorMsg("SetRollOverFlag");} -void DigitizerPHA::SetPileUpFlag(bool isPileUpFlag, int ch) { SetBits(Register::DPP::DPPAlgorithmControl, isPileUpFlag, 1, 27, ch); ErrorMsg("SetPileUpFlag");} +void DigitizerPHA::SetTrapezoidRescaling(unsigned int rightShiftBits, int ch){ SetBits(Register::DPP::DPPAlgorithmControl, rightShiftBits, 5, 0, ch); ErrorMsg("SetTrapezoidRescaling"); } +void DigitizerPHA::SetPeakSampling(unsigned int bit, int ch) { SetBits(Register::DPP::DPPAlgorithmControl, bit, 2, 12, ch); ErrorMsg("SetPeakSampling");} +void DigitizerPHA::SetPulsePolarity(bool PositiveIsZero, int ch) { SetBits(Register::DPP::DPPAlgorithmControl, PositiveIsZero, 1, 16, ch); ErrorMsg("SetPulsePolarity");} +void DigitizerPHA::SetBaselineSampling(unsigned int bit, int ch) { SetBits(Register::DPP::DPPAlgorithmControl, bit, 3, 20, ch); ErrorMsg("SetBaselineSampling"); } +void DigitizerPHA::SetRollOverFlag(bool isRollOver, int ch) { SetBits(Register::DPP::DPPAlgorithmControl, isRollOver, 1, 26, ch); ErrorMsg("SetRollOverFlag");} +void DigitizerPHA::SetPileUpFlag(bool isPileUpFlag, int ch) { SetBits(Register::DPP::DPPAlgorithmControl, isPileUpFlag, 1, 27, ch); ErrorMsg("SetPileUpFlag");} -void DigitizerPHA::SetExtra2WordOption(unsigned int bit, int ch) { SetBits(Register::DPP::PHA::DPPAlgorithmControl2_G, bit, 3, 8, ch); ErrorMsg("PHA-SetExtra2WordOption");} +void DigitizerPHA::SetExtra2WordOption(unsigned int bit, int ch) { SetBits(Register::DPP::PHA::DPPAlgorithmControl2_G, bit, 3, 8, ch); ErrorMsg("PHA-SetExtra2WordOption");} void DigitizerPHA::SetTriggerThreshold(unsigned int threshold, int ch ) { WriteRegister(Register::DPP::PHA::TriggerThreshold, threshold & 0x03FF, ch); ErrorMsg("PHA-SetTriggerThreshold");} void DigitizerPHA::SetTriggerHoldOff(unsigned int nSample, int ch ) { WriteRegister(Register::DPP::PHA::TriggerHoldOffWidth, nSample & 0x03FF, ch); ErrorMsg("PHA-SetTriggerHoldOff"); } @@ -102,6 +104,7 @@ void DigitizerPHA::PrintBoardConfiguration(){ printf(" 32 28 24 20 16 12 8 4 0\n"); printf(" | | | | | | | | |\n"); cout <<" Board Configuration : 0b" << bitset<32>(value[0]) << endl; + printf(" : 0x%x\n", value[0]); printf(" Bit[ 0] = Auto Data Flush \n"); printf(" Bit[ 1] = Save decimated waveform \n"); printf(" Bit[ 2] = Trigger propagation \n"); diff --git a/test.cpp b/test.cpp index 6537100..367a29c 100644 --- a/test.cpp +++ b/test.cpp @@ -13,19 +13,39 @@ int main(int argc, char* argv[]){ dig[i].OpenDigitizer(board, port, true); dig[i].OpenSettingBinary("setting_" + to_string(dig[i].GetSerialNumber()) + ".bin"); dig[i].SetAcqMode("list"); - //dig[i].PrintACQStatue(); + dig[i].PrintACQStatue(); } - //dig[0].PrintBoardConfiguration(); + //dig[0].WriteRegister(Register::DPP::FrontPanelTRGOUTEnableMask, 0xFF, -1); + //dig[0].WriteRegister(Register::DPP::FrontPanelIOControl, 0x100, -1); + //dig[0].WriteRegister(Register::DPP::TriggerValidationMask, 0, -1); + + //dig[0].SetTriggerThreshold(100); + + //dig[0].SetBits(Register::DPP::BoardConfiguration, 0x0101, 4, 20); // TRG validation window + dig[0].PrintBoardConfiguration(); //[20:23] vitural probe + dig[0].PrintChannelSettingFromDigitizer(15); + //dig[0].ReadRegister(Register::DPP::PHA::DPPAlgorithmControl2_G, 13, "DPP Control 2"); + //dig[0].ReadRegister(Register::DPP::AcquisitionControl, -1, "Acq control"); // [0:1] + //dig[0].ReadRegister(Register::DPP::GlobalTriggerMask, -1, "GlobalTrigger mask"); + //dig[0].ReadRegister(Register::DPP::FrontPanelTRGOUTEnableMask, -1, "Front Planel Trig-OUT mask"); /// should be 0xFF + //dig[0].ReadRegister(Register::DPP::FrontPanelIOControl, -1, "Front Planel I/O control"); + //dig[0].ReadRegister(Register::DPP::DisableExternalTrigger, -1, "Disable External Trigger"); + //dig[0].ReadRegister(Register::DPP::TriggerValidationMask, -1, "Trigger validation Mask"); + + + + //dig[0].PrintChannelSettingFromDigitizer(15); //Data * data = dig[0].data; //data->AllocateMemory(dig[0].GetHandle()); + dig[0].StartACQ(); - sleep(2); + sleep(5); dig[0].ReadData();