diff --git a/ClassDigitizer2Gen.cpp b/ClassDigitizer2Gen.cpp index bfd2e0f..938162a 100644 --- a/ClassDigitizer2Gen.cpp +++ b/ClassDigitizer2Gen.cpp @@ -545,7 +545,8 @@ void Digitizer2Gen::SetDataFormat(unsigned short dataFormat){ } //TODO Statistic handle and endpoint - ret = CAEN_FELib_GetHandle(handle, "/endpoint/dpppha/stats", &stat_handle); + if( FPGAType == DPPType::PHA ) ret = CAEN_FELib_GetHandle(handle, "/endpoint/dpppha/stats", &stat_handle); + if( FPGAType == DPPType::PSD ) ret = CAEN_FELib_GetHandle(handle, "/endpoint/dpppsd/stats", &stat_handle); ret |= CAEN_FELib_SetReadDataFormat(stat_handle, " [ \ { \"name\": \"REAL_TIME_NS\", \"type\": \"U64\", \"dim\": 1 }, \ @@ -575,22 +576,24 @@ int Digitizer2Gen::ReadStat(){ if (ret != CAEN_FELib_Success) ErrorMsg("Read Statistics"); + for( int ch = 0; ch < nChannels; ch++) ReadValue( PHA::CH::SelfTrgRate, ch); + return ret; } void Digitizer2Gen::PrintStat(){ - printf("ch | Real Time[ns] | Dead Time[ns] | Live Time[ns] | Trigger | Saved | Rate[Hz] \n"); - for( int i = 0; i < MaxNumberOfChannel; i++){ + printf("ch | Real Time[ns] | Dead Time[ns] | Live Time[ns] | Trigger | Saved | Rate[Hz] | Self Trig Rate [Hz] \n"); + for( int i = 0; i < nChannels; i++){ if( triggerCount[i] == 0 ) continue; - printf("%02d | %13lu | %13lu | %13lu | %7u | %7u | %.3f\n", - i, realTime[i], deadTime[i], liveTime[i], triggerCount[i], savedEventCount[i], triggerCount[i]*1e9*1.0/realTime[i]); + printf("%02d | %13lu | %13lu | %13lu | %7u | %7u | %8.3f | %d\n", + i, realTime[i], deadTime[i], liveTime[i], triggerCount[i], savedEventCount[i], triggerCount[i]*1e9*1.0/realTime[i], atoi(chSettings[i][0].GetValue().c_str())); } } int Digitizer2Gen::ReadData(){ - //printf("========= %s \n", __func__); + //printf("Digitizer2Gen::%s, DPP : %s, dataFormat : %d \n", __func__, FPGAType.c_str(), evt->dataType); - if( FPGAType != DPPType::PHA || FPGAType != DPPType::PSD ) return -404; + if( FPGAType != DPPType::PHA && FPGAType != DPPType::PSD ) return -404; if( evt->dataType == DataFormat::ALL ){ if( FPGAType == DPPType::PHA ){ @@ -621,6 +624,8 @@ int Digitizer2Gen::ReadData(){ &evt->aggCounter, &evt->event_size ); + + //printf("ch:%02d, trace Length %ld \n", evt->channel, evt->traceLenght); }else{ ret = CAEN_FELib_ReadData(ep_handle, 100, &evt->channel, @@ -860,7 +865,7 @@ void Digitizer2Gen::SaveDataToFile(){ //########################################### void Digitizer2Gen::Reset(){ SendCommand("/cmd/Reset"); } -void Digitizer2Gen::ProgramDPPBoard(){ +void Digitizer2Gen::ProgramBoard(){ if( !isConnected ) return ; //============= Board @@ -880,22 +885,15 @@ void Digitizer2Gen::ProgramDPPBoard(){ WriteValue("/par/EnAutoDisarmAcq" , "true"); WriteValue("/par/EnStatEvents" , "true"); + WriteValue("/par/EnAutoDisarmAcq" , "False"); WriteValue("/par/BoardVetoWidth" , "0"); WriteValue("/par/VolatileClockOutDelay" , "0"); WriteValue("/par/PermanentClockOutDelay" , "0"); WriteValue("/par/DACoutMode" , "ChInput"); - WriteValue("/par/DACoutStaticLevel" , "8192"); WriteValue("/par/DACoutChSelect" , "0"); - - //============== Test pulse - //WriteValue("/par/TestPulsePeriod" , "1000000"); // 1.0 msec = 1000Hz, tested, 1 trace recording - //WriteValue("/par/TestPulseWidth" , "1000"); // nsec - //WriteValue("/par/TestPulseLowLevel" , "0"); - //WriteValue("/par/TestPulseHighLevel" , "10000"); - //============== ITL WriteValue("/par/ITLAMainLogic" , "OR"); WriteValue("/par/ITLAMajorityLev" , "2"); @@ -909,10 +907,9 @@ void Digitizer2Gen::ProgramDPPBoard(){ WriteValue("/par/ITLBPolarity" , "Direct"); WriteValue("/par/ITLBGateWidth" , "100"); - } -void Digitizer2Gen::ProgramPHAChannels(bool testPulse){ +void Digitizer2Gen::ProgramChannels(bool testPulse){ // Channel setting @@ -932,39 +929,84 @@ void Digitizer2Gen::ProgramPHAChannels(bool testPulse){ }else{ //======== Self trigger for each channel - WriteValue("/ch/0..63/par/ChEnable" , "true"); - WriteValue("/ch/0..63/par/WaveDaatSource" , "ADC_DATA"); + WriteValue("/ch/0..63/par/ChEnable" , "True"); + WriteValue("/ch/0..63/par/DCOffset" , "50"); + WriteValue("/ch/0..63/par/TriggerThr" , "1000"); + WriteValue("/ch/0..63/par/WaveDataSource" , "ADC_DATA"); + WriteValue("/ch/0..63/par/PulsePolarity" , "Positive"); + WriteValue("/ch/0..63/par/ChRecordLengthT" , "4096"); /// 4096 ns, S and T are not Sync + WriteValue("/ch/0..63/par/ChPreTriggerT" , "1000"); - WriteValue("/ch/0..63/par/WaveResolution" , "RES8"); /// 8 ns - WriteValue("/ch/0..63/par/WaveSaving" , "OnRequest"); - WriteValue("/ch/0..63/par/PulsePolarity" , "Positive"); - WriteValue("/ch/0..63/par/EnergyFilterLFLimitation" , "Off"); - WriteValue("/ch/0..63/par/DCOffset" , "10"); /// 10% - WriteValue("/ch/0..63/par/TriggerThr" , "1000"); + WriteValue("/ch/0..63/par/WaveSaving" , "OnRequest"); + WriteValue("/ch/0..63/par/WaveResolution" , "RES8"); - WriteValue("/ch/0..63/par/TimeFilterRiseTimeS" , "10"); // 80 ns - WriteValue("/ch/0..63/par/TimeFilterRetriggerGuardS" , "10"); // 80 ns - WriteValue("/ch/0..63/par/ChRecordLengthT" , "4096"); /// 4096 ns, S and T are not Sync - WriteValue("/ch/0..63/par/ChPreTriggerT" , "1000"); /// 1000 ns + if( FPGAType == DPPType::PHA){ - //======== Trapezoid setting - WriteValue("/ch/0..63/par/EnergyFilterRiseTimeS" , "62"); // 496 ns - WriteValue("/ch/0..63/par/EnergyFilterFlatTopS" , "200"); // 1600 ns - WriteValue("/ch/0..63/par/EnergyFilterPoleZeroS" , "6250"); // 50 us - WriteValue("/ch/0..63/par/EnergyFilterPeakingPosition" , "20"); // 20 % = Flatup * 20% = 320 ns - WriteValue("/ch/0..63/par/EnergyFilterBaselineGuardS" , "100"); // 800 ns - WriteValue("/ch/0..63/par/EnergyFilterPileupGuardS" , "10"); // 80 ns - WriteValue("/ch/0..63/par/EnergyFilterBaselineAvg" , "Medium"); // 1024 sample - WriteValue("/ch/0..63/par/EnergyFilterFineGain" , "1.0"); - WriteValue("/ch/0..63/par/EnergyFilterPeakingAvg" , "LowAVG"); + WriteValue("/ch/0..63/par/TimeFilterRiseTimeT" , "80"); // 80 ns + WriteValue("/ch/0..63/par/TimeFilterRetriggerGuardT" , "80"); // 80 ns - //======== Probe Setting - WriteValue("/ch/0..63/par/WaveAnalogProbe0" , "ADCInput"); - WriteValue("/ch/0..63/par/WaveAnalogProbe1" , "EnergyFilterMinusBaseline"); - WriteValue("/ch/0..63/par/WaveDigitalProbe0" , "Trigger"); - WriteValue("/ch/0..63/par/WaveDigitalProbe1" , "EnergyFilterPeaking"); - WriteValue("/ch/0..63/par/WaveDigitalProbe2" , "TimeFilterArmed"); - WriteValue("/ch/0..63/par/WaveDigitalProbe3" , "EnergyFilterPeakReady"); + WriteValue("/ch/0..63/par/EnergyFilterLFLimitation" , "Off"); + + //======== Trapezoid setting + WriteValue("/ch/0..63/par/EnergyFilterRiseTimeT" , "496"); // 496 ns + WriteValue("/ch/0..63/par/EnergyFilterFlatTopT" , "1600"); // 1600 ns + WriteValue("/ch/0..63/par/EnergyFilterPoleZeroT" , "50000"); // 50 us + WriteValue("/ch/0..63/par/EnergyFilterPeakingPosition" , "20"); // 20 % = Flatup * 20% = 320 ns + WriteValue("/ch/0..63/par/EnergyFilterBaselineGuardT" , "800"); // 800 ns + WriteValue("/ch/0..63/par/EnergyFilterPileupGuardT" , "80"); // 80 ns + WriteValue("/ch/0..63/par/EnergyFilterBaselineAvg" , "Medium"); // 1024 sample + WriteValue("/ch/0..63/par/EnergyFilterFineGain" , "1.0"); + WriteValue("/ch/0..63/par/EnergyFilterPeakingAvg" , "LowAVG"); + + //======== Probe Setting + WriteValue("/ch/0..63/par/WaveAnalogProbe0" , "ADCInput"); + WriteValue("/ch/0..63/par/WaveAnalogProbe1" , "EnergyFilterMinusBaseline"); + WriteValue("/ch/0..63/par/WaveDigitalProbe0" , "Trigger"); + WriteValue("/ch/0..63/par/WaveDigitalProbe1" , "EnergyFilterPeaking"); + WriteValue("/ch/0..63/par/WaveDigitalProbe2" , "TimeFilterArmed"); + WriteValue("/ch/0..63/par/WaveDigitalProbe3" , "EnergyFilterPeakReady"); + + } + + if( FPGAType == DPPType::PSD ){ + + WriteValue("/ch/0..63/par/WaveAnalogProbe0" , "ADCInput"); + WriteValue("/ch/0..63/par/WaveAnalogProbe1" , "CFDFilter"); + WriteValue("/ch/0..63/par/WaveDigitalProbe0" , "Trigger"); + WriteValue("/ch/0..63/par/WaveDigitalProbe1" , "LongGate"); + WriteValue("/ch/0..63/par/WaveDigitalProbe2" , "ShortGate"); + WriteValue("/ch/0..63/par/WaveDigitalProbe3" , "ChargeReady"); + + //=========== QDC + WriteValue("/ch/0..63/par/GateLongLengthT" , "400"); + WriteValue("/ch/0..63/par/GateShortLengthT" , "100"); + WriteValue("/ch/0..63/par/GateOffsetT" , "50"); + WriteValue("/ch/0..63/par/LongChargeIntegratorPedestal" , "0"); + WriteValue("/ch/0..63/par/ShortChargeIntegratorPedestal" , "0"); + WriteValue("/ch/0..63/par/EnergyGain" , "x1"); + + //=========== Discrimination + WriteValue("/ch/0..63/par/TriggerFilterSelection" , "LeadingEdge"); + WriteValue("/ch/0..63/par/CFDDelayT" , "32"); + WriteValue("/ch/0..63/par/CFDFraction" , "25"); + WriteValue("/ch/0..63/par/TimeFilterSmoothing" , "Disabled"); + WriteValue("/ch/0..63/par/ChargeSmoothing" , "Disabled"); + WriteValue("/ch/0..63/par/SmoothingFactor" , "1"); + WriteValue("/ch/0..63/par/PileupGap" , "1000"); + + //=========== Input + WriteValue("/ch/0..63/par/ADCInputBaselineAvg" , "MediumHigh"); + WriteValue("/ch/0..63/par/AbsoluteBaseline" , "1000"); + WriteValue("/ch/0..63/par/ADCInputBaselineGuardT" , "0"); + WriteValue("/ch/0..63/par/TimeFilterRetriggerGuardT" , "0"); + WriteValue("/ch/0..63/par/TriggerHysteresis" , "Enabled"); + + //========== Other + WriteValue("/ch/0..63/par/NeutronThreshold" , "0"); + WriteValue("/ch/0..63/par/EventNeutronReject" , "Disabled"); + WriteValue("/ch/0..63/par/WaveNeutronReject" , "Disabled"); + + } //======== Trigger setting WriteValue("/ch/0..63/par/EventTriggerSource" , "ChSelfTrigger"); @@ -983,46 +1025,58 @@ void Digitizer2Gen::ProgramPHAChannels(bool testPulse){ WriteValue("/ch/0..63/par/EnergySkimHighDiscriminator" , "0"); WriteValue("/ch/0..63/par/ITLConnect" , "Disabled"); + } } -void Digitizer2Gen::ProgramPSDChannels(bool testPulse){ - if( testPulse){ - WriteValue("/ch/0..63/par/ChEnable" , "false"); - WriteValue("/ch/0..63/par/ChEnable" , "true"); +void Digitizer2Gen::PrintBoardSettings(){ - WriteValue("/ch/0..63/par/EventTriggerSource", "GlobalTriggerSource"); - WriteValue("/ch/0..63/par/WaveTriggerSource" , "GlobalTriggerSource"); // EventTriggerSource enought - - WriteValue("/par/GlobalTriggerSource", "SwTrg | TestPulse"); - WriteValue("/par/TestPulsePeriod" , "1000000"); // 1.0 msec = 1000Hz, tested, 1 trace recording - WriteValue("/par/TestPulseWidth" , "1000"); // nsec - WriteValue("/par/TestPulseLowLevel" , "0"); - WriteValue("/par/TestPulseHighLevel" , "10000"); - - }else{ - - //TODO not finished. - - //======== Self trigger for each channel - WriteValue("/ch/0..63/par/ChEnable" , "true"); - WriteValue("/ch/0..63/par/WaveDaatSource" , "ADC_DATA"); - WriteValue("/ch/0..63/par/WaveResolution" , "RES8"); /// 8 ns - WriteValue("/ch/0..63/par/WaveSaving" , "OnRequest"); - WriteValue("/ch/0..63/par/PulsePolarity" , "Positive"); - WriteValue("/ch/0..63/par/DCOffset" , "20"); /// 20% - WriteValue("/ch/0..63/par/TriggerThr" , "1000"); - - WriteValue("/ch/0..63/par/EventNeutronReject", "Disabled"); - WriteValue("/ch/0..63/par/WaveNeutronReject", "Disabled"); - - WriteValue("/ch/0..63/par/WaveAnalogProbe0" , "ADCInput"); - - WriteValue("/ch/0..63/par/ChRecordLengthT" , "4096"); /// 4096 ns, S and T are not Sync - WriteValue("/ch/0..63/par/ChPreTriggerT" , "1000"); /// 1000 ns + for(int i = 0; i < (int) boardSettings.size(); i++){ + if( boardSettings[i].ReadWrite() == RW::WriteOnly) continue; + + //--- exclude some TempSens for Not VX2745 + if( ModelName != "VX2745" && + ( boardSettings[i].GetPara() == PHA::DIG::TempSensADC1.GetPara() || + boardSettings[i].GetPara() == PHA::DIG::TempSensADC2.GetPara() || + boardSettings[i].GetPara() == PHA::DIG::TempSensADC3.GetPara() || + boardSettings[i].GetPara() == PHA::DIG::TempSensADC4.GetPara() || + boardSettings[i].GetPara() == PHA::DIG::TempSensADC5.GetPara() || + boardSettings[i].GetPara() == PHA::DIG::TempSensADC6.GetPara() ) ) { + continue; + } + printf("%-45s %d %s\n", boardSettings[i].GetFullPara().c_str(), + boardSettings[i].ReadWrite() , + boardSettings[i].GetValue().c_str()); } + if( ModelName == "VX2745" && FPGAType == DPPType::PHA) { + for(int i = 0; i < 4 ; i ++){ + printf("%-45s %d %s\n", VGASetting[i].GetFullPara(i).c_str(), + VGASetting[i].ReadWrite(), + VGASetting[i].GetValue().c_str()); + } + } + + for( int i = 0; i < (int) LVDSSettings[0].size(); i++){ + for( int index = 0; index < 4; index++){ + if( LVDSSettings[index][i].ReadWrite() == RW::WriteOnly) continue; + printf("%-45s %d %s\n", LVDSSettings[index][i].GetFullPara(index).c_str(), + LVDSSettings[index][i].ReadWrite(), + LVDSSettings[index][i].GetValue().c_str()); + } + } + +} + +void Digitizer2Gen::PrintChannelSettings(unsigned short ch){ + + for( int i = 0; i < (int) chSettings[0].size(); i++){ + if( chSettings[ch][i].ReadWrite() == RW::WriteOnly) continue; + printf("%-45s %d %s\n", chSettings[ch][i].GetFullPara(ch).c_str(), + chSettings[ch][i].ReadWrite(), + chSettings[ch][i].GetValue().c_str()); + } } std::string Digitizer2Gen::ErrorMsg(const char * funcName){ diff --git a/ClassDigitizer2Gen.h b/ClassDigitizer2Gen.h index 59970fa..64a1434 100644 --- a/ClassDigitizer2Gen.h +++ b/ClassDigitizer2Gen.h @@ -115,9 +115,11 @@ class Digitizer2Gen { uint64_t GetRealTime(int ch) const {return realTime[ch];} void Reset(); - void ProgramDPPBoard(); - void ProgramPHAChannels(bool testPulse = false); - void ProgramPSDChannels(bool testPulse = false); + void ProgramBoard(); + void ProgramChannels(bool testPulse = false); + + void PrintBoardSettings(); + void PrintChannelSettings(unsigned short ch); unsigned short GetNChannels() const {return nChannels;} unsigned short GetCh2ns() const {return ch2ns;} diff --git a/DigiParameters.h b/DigiParameters.h index f4c2e7a..576bd8e 100644 --- a/DigiParameters.h +++ b/DigiParameters.h @@ -588,25 +588,40 @@ namespace PHA{ const Reg ITLConnect ("ITLConnect", RW::ReadWrite, TYPE::CH, {{"Disabled", "Disabled"},{"ITLA", "ITLA"}, {"ITLB", "ITLB"}}); const std::vector AllSettings = { - SelfTrgRate , - ChannelStatus , - GainFactor , - ADCToVolts , - Energy_Nbit , - ChannelRealtime , - ChannelDeadtime , - ChannelTriggerCount , - ChannelSavedCount , - ChannelWaveCount , - ChannelEnable , - DC_Offset , - TriggerThreshold , - Polarity , - WaveDataSource , - RecordLength , - WaveSaving , - WaveResolution , - PreTrigger , + SelfTrgRate , // 0 + ChannelStatus , // 1 + GainFactor , // 2 + ADCToVolts , // 3 + Energy_Nbit , // 4 + ChannelRealtime , // 5 + ChannelDeadtime , // 6 + ChannelTriggerCount , // 7 + ChannelSavedCount , // 8 + ChannelWaveCount , // 9 + + ChannelEnable , // 0 + DC_Offset , // 1 + TriggerThreshold , // 2 + Polarity , // 3 + WaveDataSource , // 4 + RecordLength , // 5 + PreTrigger , // 6 + WaveSaving , // 7 + WaveResolution , // 8 + EventTriggerSource , // 9 + ChannelsTriggerMask , // 10 + ChannelVetoSource , // 11 + WaveTriggerSource , // 12 + EventSelector , // 13 + WaveSelector , // 14 + CoincidenceMask , // 15 + AntiCoincidenceMask , // 16 + CoincidenceLength , // 17 + ADCVetoWidth , // 18 + EnergySkimLowDiscriminator , // 19 + EnergySkimHighDiscriminator, // 20 + ITLConnect , // 21 + TimeFilterRiseTime , TimeFilterRetriggerGuard , EnergyFilterRiseTime , @@ -625,19 +640,8 @@ namespace PHA{ WaveDigitalProbe1 , WaveDigitalProbe2 , WaveDigitalProbe3 , - EventTriggerSource , - ChannelsTriggerMask , - ChannelVetoSource , - WaveTriggerSource , - EventSelector , - WaveSelector , - CoincidenceMask , - AntiCoincidenceMask , - CoincidenceLength , + CoincidenceLengthSample , - ADCVetoWidth , - EnergySkimLowDiscriminator , - EnergySkimHighDiscriminator, RecordLengthSample , PreTriggerSample , TimeFilterRiseTimeSample , @@ -646,8 +650,7 @@ namespace PHA{ EnergyFilterFlatTopSample , EnergyFilterPoleZeroSample , EnergyFilterBaselineGuardSample , - EnergyFilterPileUpGuardSample , - ITLConnect + EnergyFilterPileUpGuardSample }; } @@ -657,7 +660,7 @@ namespace PHA{ namespace PSD{ - namespace DIG{ + namespace DIG{ // the PSD::DIG are identical to PHA::DIG ///============== read only const Reg CupVer = PHA::DIG::CupVer; @@ -870,7 +873,6 @@ namespace PSD{ //LVDSTrgMask }; - } namespace VGA{ @@ -1049,64 +1051,69 @@ namespace PSD{ const std::vector AllSettings = { SelfTrgRate , // 0 - ChannelStatus , // 1 - GainFactor , // 2 - ADCToVolts , // 3 - ChannelRealtime , // 4 - ChannelDeadtime , // 5 - ChannelTriggerCount , // 6 - ChannelSavedCount , // 7 - ChannelWaveCount , // 8 - ChannelEnable , // 9 - DC_Offset , // 10 - TriggerThreshold , // 11 - Polarity , // 12 - WaveDataSource , // 13 - RecordLength , // 14 - WaveSaving , // 15 - WaveResolution , // 16 - PreTrigger , // 17 - WaveAnalogProbe0 , // 18 - WaveAnalogProbe1 , // 19 - WaveDigitalProbe0 , // 20 - WaveDigitalProbe1 , // 21 - WaveDigitalProbe2 , // 22 - WaveDigitalProbe3 , // 23 - EventTriggerSource , // 24 - ChannelsTriggerMask , // 25 - ChannelVetoSource , // 26 - WaveTriggerSource , // 27 - EventSelector , // 28 - WaveSelector , // 29 - CoincidenceMask , // 30 - AntiCoincidenceMask , // 31 - CoincidenceLength , // 32 - CoincidenceLengthSample , // 33 - ADCVetoWidth , // 34 - EnergySkimLowDiscriminator , // 35 - EnergySkimHighDiscriminator, // 36 - RecordLengthSample , // 37 - PreTriggerSample , // 38 - ITLConnect , // 39 - ADCInputBaselineAvg , // 40 - AbsoluteBaseline , // 41 - ADCInputBaselineGuard , // 42 - SmoothingFactor , // 43 - ChargeSmoothing , // 44 - TimeFilterSmoothing , // 45 - TriggerFilterSelection , // 46 - CFDDelay , // 47 - CFDFraction , // 48 - TimeFilterRetriggerGuard , // 49 - TriggerHysteresis , // 50 - PileupGap , // 51 - GateLongLength , // 52 - GateShortLength , // 53 - GateOffset , // 54 + ChannelStatus , // 1 + GainFactor , // 2 + ADCToVolts , // 3 + ChannelRealtime , // 4 + ChannelDeadtime , // 5 + ChannelTriggerCount , // 6 + ChannelSavedCount , // 7 + ChannelWaveCount , // 8 + + ChannelEnable , // 0 + DC_Offset , // 1 + TriggerThreshold , // 2 + Polarity , // 3 + WaveDataSource , // 4 + RecordLength , // 5 + PreTrigger , // 6 + WaveSaving , // 7 + WaveResolution , // 8 + EventTriggerSource , // 9 + ChannelsTriggerMask , // 10 + ChannelVetoSource , // 11 + WaveTriggerSource , // 12 + EventSelector , // 13 + WaveSelector , // 14 + CoincidenceMask , // 15 + AntiCoincidenceMask , // 16 + CoincidenceLength , // 17 + ADCVetoWidth , // 18 + EnergySkimLowDiscriminator , // 19 + EnergySkimHighDiscriminator, // 20 + ITLConnect , // 21 + + EventNeutronReject , + WaveNeutronReject , + ADCInputBaselineAvg , + AbsoluteBaseline , + ADCInputBaselineGuard , + SmoothingFactor , + ChargeSmoothing , + TimeFilterSmoothing , + TriggerFilterSelection , + CFDDelay , + CFDFraction , + TimeFilterRetriggerGuard , + TriggerHysteresis , + PileupGap , + GateLongLength , + GateShortLength , + GateOffset , LongChargeIntegratorPedestal, // ShortChargeIntegratorPedestal, // EnergyGain , NeutronThreshold , + WaveAnalogProbe0 , // + WaveAnalogProbe1 , // + WaveDigitalProbe0 , // + WaveDigitalProbe1 , // + WaveDigitalProbe2 , // + WaveDigitalProbe3 , // + + RecordLengthSample , // 21 + PreTriggerSample , // 22 + CoincidenceLengthSample , // ADCInputBaselineGuardSample, CFDDelaySample , TimeFilterRetriggerGuardSample, diff --git a/digiSettingsPanel.cpp b/digiSettingsPanel.cpp index e4a3eeb..df575e8 100644 --- a/digiSettingsPanel.cpp +++ b/digiSettingsPanel.cpp @@ -1980,8 +1980,8 @@ void DigiSettingsPanel::LoadSettings(){ void DigiSettingsPanel::SetDefaultPHASettigns(){ SendLogMsg("Program Digitizer-" + QString::number(digi[ID]->GetSerialNumber()) + " to default PHA."); - digi[ID]->ProgramDPPBoard(); - digi[ID]->ProgramPHAChannels(); + digi[ID]->ProgramBoard(); + digi[ID]->ProgramChannels(); RefreshSettings(); } diff --git a/mainwindow.cpp b/mainwindow.cpp index 53eed22..2cef665 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -696,7 +696,7 @@ void MainWindow::OpenDigitizers(){ digi[i]->SetSettingFileName(""); //LogMsg("Reset digitizer And set default PHA settings."); //digi[i]->Reset(); - //digi[i]->ProgramDPPBoard(false); + //digi[i]->ProgramBoard(false); } digi[i]->ReadAllSettings(); diff --git a/scope.cpp b/scope.cpp index 7815435..f616a7d 100644 --- a/scope.cpp +++ b/scope.cpp @@ -22,6 +22,7 @@ Scope::Scope(Digitizer2Gen **digi, unsigned int nDigi, ReadDataThread ** readDat setWindowFlags( this->windowFlags() & ~Qt::WindowCloseButtonHint ); allowChange = false; + originalValueSet = false; plot = new Trace(); for( int i = 0; i < 6; i++) { @@ -112,7 +113,7 @@ Scope::Scope(Digitizer2Gen **digi, unsigned int nDigi, ReadDataThread ** readDat if( !allowChange ) return; int iDigi = cbScopeDigi->currentIndex(); //digi[iDigi]->Reset(); - digi[iDigi]->ProgramPHAChannels(); + digi[iDigi]->ProgramChannels(); //SendLogMsg("Reset Digi-" + QString::number(digi[iDigi]->GetSerialNumber()) + " and Set Default PHA."); ReadScopeSettings(); UpdateOtherPanels(); @@ -474,7 +475,9 @@ void Scope::StartScope(){ } - digi[iDigi]->SetDataFormat(0); //TODO Should be only trace? + originalValueSet = true; + + digi[iDigi]->SetDataFormat(DataFormat::ALL); digi[iDigi]->StartACQ(); readDataThread[iDigi]->SetSaveData(false); @@ -507,12 +510,15 @@ void Scope::StopScope(){ digiMTX[i].lock(); digi[i]->StopACQ(); - for( int ch2 = 0 ; ch2 < digi[i]->GetNChannels(); ch2 ++){ - digi[i]->WriteValue(PHA::CH::ChannelEnable, channelEnable[i][ch2], ch2); - } - if( i == cbScopeDigi->currentIndex() ) { - digi[i]->WriteValue(PHA::CH::WaveTriggerSource, waveTriggerSource, cbScopeCh->currentIndex()); - digi[i]->WriteValue(PHA::CH::WaveSaving, waveSaving, cbScopeCh->currentIndex()); + if( originalValueSet ){ + for( int ch2 = 0 ; ch2 < digi[i]->GetNChannels(); ch2 ++){ + digi[i]->WriteValue(PHA::CH::ChannelEnable, channelEnable[i][ch2], ch2); + } + if( i == cbScopeDigi->currentIndex() ) { + digi[i]->WriteValue(PHA::CH::WaveTriggerSource, waveTriggerSource, cbScopeCh->currentIndex()); + digi[i]->WriteValue(PHA::CH::WaveSaving, waveSaving, cbScopeCh->currentIndex()); + } + originalValueSet = false; } digiMTX[i].unlock(); } diff --git a/scope.h b/scope.h index 4931549..869e24e 100644 --- a/scope.h +++ b/scope.h @@ -202,6 +202,7 @@ private: bool allowChange; // remembee setting, once the scope stop, restore it. + bool originalValueSet; std::string channelEnable[MaxNumberOfDigitizer][MaxNumberOfChannel]; std::string waveSaving; std::string waveTriggerSource; diff --git a/test.cpp b/test.cpp index d5fe0ea..78dbab4 100644 --- a/test.cpp +++ b/test.cpp @@ -20,11 +20,13 @@ InfluxDB * influx = new InfluxDB("https://fsunuc.physics.fsu.edu/influx/", false unsigned int readCount = 0; +bool ThreadStop = false; timespec ta, tb; + static void ReadDataLoop(){ clock_gettime(CLOCK_REALTIME, &ta); //while(digi->IsAcqOn() && readCount < maxRead){ - while(true){ + while(!ThreadStop){ digiMTX.lock(); int ret = digi->ReadData(); digiMTX.unlock(); @@ -35,7 +37,7 @@ static void ReadDataLoop(){ digi->ErrorMsg("No more data"); break; }else{ - digi->ErrorMsg("ReadDataLoop()"); + //digi->ErrorMsg("ReadDataLoop()"); } //if( readCount % 1000 == 0 ) { // clock_gettime(CLOCK_REALTIME, &tb); @@ -56,21 +58,20 @@ static void StatLoop(){ digiMTX.lock(); digi->ReadStat(); - for(int i = 0; i < 64; i++){ - sprintf(cmdStr, "/ch/%d/par/SelfTrgRate", i); - std::string haha = digi->ReadValue( cmdStr, false); - influx->AddDataPoint("Rate,Bd=0,Ch=" + std::to_string(i) + " value=" + haha); - } - //digi->ReadValue("/ch/4/par/ChRealtimeMonitor", true); - //digi->ReadValue("/ch/4/par/ChDeadtimeMonitor", true); - //digi->ReadValue("/ch/4/par/ChTriggerCnt", true); - //digi->ReadValue("/ch/4/par/ChSavedEventCnt", true); - //digi->ReadValue("/ch/4/par/ChWaveCnt", true); + // for(int i = 0; i < 64; i++){ + // digi->ReadValue( PHA::CH::SelfTrgRate, i, false); + // //influx->AddDataPoint("Rate,Bd=0,Ch=" + std::to_string(i) + " value=" + haha); + // } + // digi->ReadValue("/ch/4/par/ChRealtimeMonitor", true); + // digi->ReadValue("/ch/4/par/ChDeadtimeMonitor", true); + // digi->ReadValue("/ch/4/par/ChTriggerCnt", true); + // digi->ReadValue("/ch/4/par/ChSavedEventCnt", true); + // digi->ReadValue("/ch/4/par/ChWaveCnt", true); digiMTX.unlock(); //influx->PrintDataPoints(); - influx->WriteData("testing"); - influx->ClearDataPointsBuffer(); + //influx->WriteData("testing"); + //influx->ClearDataPointsBuffer(); digi->PrintStat(); usleep(1000*1000); // every 1000 msec } @@ -90,63 +91,17 @@ int main(int argc, char* argv[]){ const char * url = "dig2://192.168.0.254/"; digi->OpenDigitizer(url); - digi->Reset(); - //digi->ReadValue(PSD::DIG::CupVer, -1, true); - digi->ReadAllSettings(); + //digi->Reset(); + //digi->ReadAllSettings(); - for( int ch = 0; ch < 64; ch++ ) { - printf( "|%s| \n", digi->GetSettingValue(PSD::CH::TimeFilterRetriggerGuard, ch).c_str()); - } + //digi->ProgramBoard(); + //digi->WriteValue(PSD::CH::TriggerThreshold, "1000", -1); - digi->SaveSettingsToFile("test_setting.txt"); + digi->PrintChannelSettings(0); - - //digi->ProgramDPPBoard(false); - //printf("--------%s \n", digi->ReadChValue("0..63", "WaveAnalogprobe0", true).c_str()); - - //digi->SaveSettingsToFile(("settings_" + std::to_string(digi->GetSerialNumber()) + ".dat").c_str()); - - //printf("===================================\n"); - - //printf("======== index : %d \n", digi->FindIndex(PHA::CH::ChannelEnable)); - - //digi->LoadSettingsFromFile("settings_21245.dat"); - //printf("%s \n", digi->ReadValue("/ch/0/par/ChRealtimeMonitor").c_str()); - //printf("%s \n", digi->ReadValue("/ch/0/par/Energy_Nbit").c_str()); - //printf("%s \n", digi->ReadValue("/par/MaxRawDataSize").c_str()); - - - /*///======================= Play with handle - uint64_t parHandle; - - parHandle = digi->GetHandle("/ch/0/par/ChRealtimeMonitor"); printf("%lu|%lX\n", parHandle, parHandle); - parHandle = digi->GetHandle("/ch/1/par/ChRealtimeMonitor"); printf("%lu|%lX\n", parHandle, parHandle); - - - printf("%s\n", digi->GetPath(parHandle).c_str()); - - - parHandle = digi->GetParentHandle(parHandle); printf("%lu|%lX\n", parHandle, parHandle); - printf("%s\n", digi->GetPath(parHandle).c_str()); - - parHandle = digi->GetParentHandle(parHandle); printf("%lu|%lX\n", parHandle, parHandle); - printf("%s\n", digi->GetPath(parHandle).c_str()); - - parHandle = digi->GetParentHandle(parHandle); printf("%lu|%lX\n", parHandle, parHandle); - printf("%s\n", digi->GetPath(parHandle).c_str()); - - parHandle = digi->GetParentHandle(parHandle); printf("%lu|%lX\n", parHandle, parHandle); - printf("%s\n", digi->GetPath(parHandle).c_str()); - */ - - /* - digi->ReadDigitizerSettings(); - - digi->SetPHADataFormat(1); - - //printf("0x%X \n", atoi(digi->ReadValue("/par/AcquisitionStatus").c_str()) & 0x3F ); + digi->SetDataFormat(DataFormat::OneTrace); digi->OpenOutFile("haha"); @@ -164,6 +119,8 @@ int main(int argc, char* argv[]){ c = getchar(); }while( c != 'q'); + ThreadStop = true; + digiMTX.lock(); digi->StopACQ(); digiMTX.unlock(); @@ -176,9 +133,7 @@ int main(int argc, char* argv[]){ t1.tv_nsec-t0.tv_nsec + t1.tv_sec*1e+9 - t0.tv_sec*1e+9, (t1.tv_nsec-t0.tv_nsec + t1.tv_sec*1e+9 - t0.tv_sec*1e+9)*1.0/1e9); - digi->CloseOutFile(); - - */ + digi->CloseOutFile(); digi->CloseDigitizer();