QDC, Add the OverThresholdWidth setting, but only for ROC > 4.15 and AMC > 135.15
This commit is contained in:
parent
c1f223532c
commit
d3f97358e2
|
@ -142,8 +142,31 @@ int Digitizer::OpenDigitizer(int boardID, int portID, bool program, bool verbose
|
|||
NCoupledCh = NumRegChannel;
|
||||
isInputChEqRegCh = false;
|
||||
ModelType = ModelTypeCode::VME;
|
||||
tick2ns = 16.0; break; ///ns -> 62.5 MSamples/s
|
||||
}
|
||||
tick2ns = 16.0; ///ns -> 62.5 MSamples/s
|
||||
|
||||
std::string ROC = BoardInfo.ROC_FirmwareRel;
|
||||
std::string AMC = BoardInfo.AMC_FirmwareRel;
|
||||
|
||||
std::size_t pos = ROC.find(" - ");
|
||||
std::string versionROCStr = (pos != std::string::npos) ? ROC.substr(0, pos) : "";
|
||||
pos = AMC.find(" - ");
|
||||
std::string versionAMCStr = (pos != std::string::npos) ? AMC.substr(0, pos) : "";
|
||||
|
||||
double versionROC = 0.0;
|
||||
double versionAMC = 0.0;
|
||||
if (!versionROCStr.empty()) versionROC = std::stod(versionROCStr);
|
||||
if (!versionAMCStr.empty()) versionAMC = std::stod(versionAMCStr);
|
||||
|
||||
printf(" QDC ROC version : %.2f \n", versionROC);
|
||||
printf(" QDC AMC version : %.2f \n", versionAMC);
|
||||
if( versionROC <= 4.25 || versionAMC <= 135.15 ){
|
||||
printf(" QDC ROC or AMC version not support OverThreshold Width.\n");
|
||||
hasOverThresholdWidth = false;
|
||||
}else{
|
||||
hasOverThresholdWidth = true;
|
||||
}
|
||||
|
||||
}; break;
|
||||
default : tick2ns = 4.0; break;
|
||||
}
|
||||
|
||||
|
@ -777,6 +800,7 @@ void Digitizer::WriteRegister (Reg registerAddress, uint32_t value, int ch, bool
|
|||
}
|
||||
|
||||
if( registerAddress.GetRWType() == RW::ReadONLY ) return;
|
||||
if( !hasOverThresholdWidth && registerAddress == DPP::QDC::OverThresholdWidth ) return ;
|
||||
|
||||
ret = CAEN_DGTZ_WriteRegister(handle, registerAddress.ActualAddress(ch), value);
|
||||
|
||||
|
@ -821,6 +845,8 @@ uint32_t Digitizer::ReadRegister(Reg registerAddress, unsigned short ch, bool is
|
|||
if( registerAddress.GetRWType() == RW::WriteONLY ) return 0;
|
||||
// if( registerAddress == DPP::QDC::RecordLength_W ) return 0;
|
||||
|
||||
if( !hasOverThresholdWidth && registerAddress == DPP::QDC::OverThresholdWidth ) return 0;
|
||||
|
||||
ret = CAEN_DGTZ_ReadRegister(handle, registerAddress.ActualAddress(ch), &returnData);
|
||||
|
||||
if( ret == 0 && isSave2MemAndFile && !AcqRun) {
|
||||
|
|
|
@ -60,6 +60,7 @@ class Digitizer{
|
|||
bool isSettingFileExist; ///
|
||||
bool isSettingFileUpdate;
|
||||
bool isSettingFilledinMemeory; /// false for disabled ReadAllSettingFromBoard()
|
||||
bool hasOverThresholdWidth; /// for QDC
|
||||
unsigned int setting[SETTINGSIZE]; /// Setting, 4bytes x 2048 = 8192 bytes
|
||||
|
||||
//^-------- other protected functions
|
||||
|
@ -152,6 +153,7 @@ class Digitizer{
|
|||
int GetErrorCode() const {return ret;}
|
||||
unsigned int GetChMemSizekSample() const {return MemorySizekSample;}
|
||||
std::string GetFamilyName() const {return familyName;}
|
||||
bool HasOverThresholdWidth_QDC() const {return hasOverThresholdWidth;}
|
||||
|
||||
//^================ Setting
|
||||
Reg FindRegister(uint32_t address);
|
||||
|
|
|
@ -2760,13 +2760,22 @@ void DigiSettingsPanel::SetUpChannel_QDC(){
|
|||
|
||||
SetUpCheckBox(chkDisableSelfTrigger[ID][numGroup], "Disable Self Trigger ", triggerLayout, 0, 1, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::DisableSelfTrigger);
|
||||
SetUpCheckBox(chkDisableTriggerHysteresis[ID][numGroup], "Disbale Trig. Hysteresis ", triggerLayout, 2, 1, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::DisableTriggerHysteresis, -1, 2);
|
||||
|
||||
SetUpComboBoxBit(cbTrigMode[ID][numGroup], "Trig. Mode : ", triggerLayout, 0, 2, DPP::QDC::Bit_DPPAlgorithmControl::ListTrigMode, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::TriggerMode);
|
||||
SetUpSpinBox(sbTriggerHoldOff[ID][numGroup], "Trig. Holdoff [ns] : ", triggerLayout, 2, 2, DPP::QDC::TriggerHoldOffWidth);
|
||||
SetUpSpinBox(sbShapedTrigWidth[ID][numGroup], "Trig. Out Width [ns] : ", triggerLayout, 3, 2, DPP::QDC::TRGOUTWidth);
|
||||
|
||||
int rowID = 4;
|
||||
if( digi[ID]->HasOverThresholdWidth_QDC() ){
|
||||
SetUpCheckBox(chkOverthreshold[ID][numGroup], "Enable OverThreshold Width ", triggerLayout, rowID, 1, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::OverThresholdWitdhEnable);
|
||||
SetUpSpinBox(sbOverThresholdWidth[ID][numGroup], "OverThreshold Width [ns] :", triggerLayout, rowID, 2, DPP::QDC::OverThresholdWidth);
|
||||
rowID ++;
|
||||
}
|
||||
|
||||
|
||||
/// Trigger Threshold
|
||||
QGroupBox * widget = new QGroupBox("Threshold [LSB]", triggerBox);
|
||||
triggerLayout->addWidget(widget, 4, 0, 1, 4);
|
||||
triggerLayout->addWidget(widget, rowID, 0, 1, 4);
|
||||
|
||||
QGridLayout * dcLayout = new QGridLayout(widget);
|
||||
dcLayout->setSpacing(2);
|
||||
|
@ -3025,7 +3034,7 @@ void DigiSettingsPanel::SetUpChannel_QDC(){
|
|||
QTabWidget * trigTab = new QTabWidget(this);
|
||||
trigLayout->addWidget(trigTab);
|
||||
|
||||
QStringList tabName = {"Common Settings", "Threshold", "Others"};
|
||||
QStringList tabName = {"Common Settings", "Threshold", "OverThreshold Width", "Others"};
|
||||
|
||||
const int nTab = tabName.count();
|
||||
|
||||
|
@ -3105,6 +3114,20 @@ void DigiSettingsPanel::SetUpChannel_QDC(){
|
|||
}
|
||||
|
||||
if( i == 2 ){
|
||||
|
||||
if( digi[ID]->HasOverThresholdWidth_QDC() ){
|
||||
if( ch == 0 ){
|
||||
QLabel * lb0 = new QLabel("OverThreshold Width [ns]", this); lb0->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb0, 0, 4);
|
||||
}
|
||||
SetUpCheckBox(chkOverthreshold[ID][ch], "Enable OverThreshold Width ", tabLayout, ch+1, 1, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::OverThresholdWitdhEnable, ch);
|
||||
SetUpSpinBox(sbOverThresholdWidth[ID][ch], "", tabLayout, ch+1, 3, DPP::QDC::OverThresholdWidth, ch);
|
||||
}else{
|
||||
QLabel * lb0 = new QLabel("OverThreshold Width not supported.", this); lb0->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb0, 0, 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if( i == 3 ){
|
||||
SetUpCheckBox(chkDisableSelfTrigger[ID][ch], "Disable Self Trigger ", tabLayout, ch+1, 1, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::DisableSelfTrigger, ch);
|
||||
SetUpCheckBox(chkDisableTriggerHysteresis[ID][ch], "Disbale Trig. Hysteresis ", tabLayout, ch+1, 3, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::DisableTriggerHysteresis, ch, 2);
|
||||
}
|
||||
|
@ -3113,7 +3136,7 @@ void DigiSettingsPanel::SetUpChannel_QDC(){
|
|||
}
|
||||
}
|
||||
|
||||
{//^================================== QDC
|
||||
{//^================================== QDC
|
||||
|
||||
QVBoxLayout *trapLayout = new QVBoxLayout(chTrap);
|
||||
|
||||
|
@ -3172,7 +3195,7 @@ void DigiSettingsPanel::SetUpChannel_QDC(){
|
|||
}
|
||||
}
|
||||
|
||||
{//^======================================== Others
|
||||
{//^======================================== Others
|
||||
QVBoxLayout *otherLayout = new QVBoxLayout(chOthers);
|
||||
|
||||
QTabWidget * othersTab = new QTabWidget(this);
|
||||
|
@ -3972,22 +3995,23 @@ void DigiSettingsPanel::SyncAllChannelsTab_QDC(){
|
|||
DebugPrint("%s", "DigiSettingsPanel");
|
||||
if( !enableSignalSlot ) return;
|
||||
|
||||
// SyncSpinBox(sbRecordLength);
|
||||
SyncSpinBox(sbPreTrigger);
|
||||
SyncSpinBox(sbDCOffset);
|
||||
SyncSpinBox(sbTriggerHoldOff);
|
||||
SyncSpinBox(sbShapedTrigWidth);
|
||||
// SyncSpinBox(sbNumEventAgg);
|
||||
SyncSpinBox(sbShortGate);
|
||||
SyncSpinBox(sbGateOffset);
|
||||
//SyncSpinBox(sbOverThresholdWidth);
|
||||
|
||||
SyncCheckBox(chkDisableSelfTrigger);
|
||||
SyncCheckBox(chkDisableTriggerHysteresis);
|
||||
//SyncCheckBox(chkOverthreshold);
|
||||
SyncCheckBox(chkChargePedestal);
|
||||
SyncCheckBox(chkTestPule);
|
||||
|
||||
if( digi[ID]->HasOverThresholdWidth_QDC() ){
|
||||
SyncSpinBox(sbOverThresholdWidth);
|
||||
SyncCheckBox(chkOverthreshold);
|
||||
}
|
||||
|
||||
SyncComboBox(cbPolarity);
|
||||
SyncComboBox(cbRCCR2Smoothing);
|
||||
SyncComboBox(cbBaseLineAvg);
|
||||
|
@ -4081,7 +4105,7 @@ void DigiSettingsPanel::UpdateSettings_QDC(){
|
|||
UpdateSpinBox(sbShapedTrigWidth[ID][grp], DPP::QDC::TRGOUTWidth, grp);
|
||||
UpdateSpinBox(sbShortGate[ID][grp], DPP::QDC::GateWidth, grp);
|
||||
UpdateSpinBox(sbGateOffset[ID][grp], DPP::QDC::GateOffset, grp);
|
||||
//UpdateSpinBox(sbOverThresholdWidth[ID][grp], DPP::QDC::OverThresholdWidth, grp);
|
||||
|
||||
|
||||
uint32_t subChMask = digi[ID]->GetSettingFromMemory(DPP::QDC::SubChannelMask, grp);
|
||||
|
||||
|
@ -4104,10 +4128,13 @@ void DigiSettingsPanel::UpdateSettings_QDC(){
|
|||
|
||||
chkDisableSelfTrigger[ID][grp]->setChecked( Digitizer::ExtractBits(dpp, DPP::QDC::Bit_DPPAlgorithmControl::DisableSelfTrigger) );
|
||||
chkDisableTriggerHysteresis[ID][grp]->setChecked( Digitizer::ExtractBits(dpp, DPP::QDC::Bit_DPPAlgorithmControl::DisableTriggerHysteresis) );
|
||||
//chkOverthreshold[ID][grp]->setChecked( Digitizer::ExtractBits(dpp, DPP::QDC::Bit_DPPAlgorithmControl::OverThresholdWitdhEnable) );
|
||||
chkChargePedestal[ID][grp]->setChecked( Digitizer::ExtractBits(dpp, DPP::QDC::Bit_DPPAlgorithmControl::ChargePedestal));
|
||||
chkTestPule[ID][grp]->setChecked( Digitizer::ExtractBits(dpp, DPP::QDC::Bit_DPPAlgorithmControl::InternalTestPulse));
|
||||
|
||||
if( digi[ID]->HasOverThresholdWidth_QDC() ) {
|
||||
UpdateSpinBox(sbOverThresholdWidth[ID][grp], DPP::QDC::OverThresholdWidth, grp);
|
||||
chkOverthreshold[ID][grp]->setChecked( Digitizer::ExtractBits(dpp, DPP::QDC::Bit_DPPAlgorithmControl::OverThresholdWitdhEnable) );
|
||||
}
|
||||
|
||||
uint32_t dcOffSet_low = digi[ID]->GetSettingFromMemory(DPP::QDC::DCOffset_LowCh, grp);
|
||||
|
||||
|
|
|
@ -294,8 +294,8 @@ private:
|
|||
//Trig Hold off with -> sbTriggerHoldOff
|
||||
//Trig out width -> sbShapedTrigWidth
|
||||
|
||||
//QCheckBox * chkOverthreshold[MaxNDigitizer][MaxRegChannel+1]; //TODO need firmware version 4.25 & 135.17
|
||||
//RSpinBox * sbOverThresholdWidth[MaxNDigitizer][MaxRegChannel + 1];
|
||||
QCheckBox * chkOverthreshold[MaxNDigitizer][MaxRegChannel+1]; //TODO need firmware version 4.25 & 135.17
|
||||
RSpinBox * sbOverThresholdWidth[MaxNDigitizer][MaxRegChannel + 1];
|
||||
QPushButton * pbSubChMask[MaxNDigitizer][MaxRegChannel+1][8];
|
||||
RSpinBox * sbSubChOffset[MaxNDigitizer][MaxRegChannel + 1][8];
|
||||
RSpinBox * sbSubChThreshold[MaxNDigitizer][MaxRegChannel + 1][8];
|
||||
|
|
|
@ -795,7 +795,7 @@ namespace DPP {
|
|||
const Reg DPPAlgorithmControl ("DPPAlgorithmControl" , 0x1040, RW::ReadWrite, false, {}); /// R/W
|
||||
const Reg TriggerHoldOffWidth ("Trigger Hold-off width" , 0x1074, RW::ReadWrite, false, 0xFFFF, 1); /// R/W
|
||||
const Reg TRGOUTWidth ("Trigger out width" , 0x1078, RW::ReadWrite, false, 0xFFFF, 1); /// R/W
|
||||
//const Reg OverThresholdWidth ("Over Threshold width" , 0x107C, RW::ReadWrite, false, 0xFFFF, 1); /// R/W // need firmware version 4.25 & 135.17
|
||||
const Reg OverThresholdWidth ("Over Threshold width" , 0x107C, RW::ReadWrite, false, 0xFFFF, 1); /// R/W // need firmware version 4.25 & 135.17
|
||||
const Reg GroupStatus_R ("Group Status" , 0x1088, RW::ReadONLY, false, {}); /// R/
|
||||
const Reg AMCFirmwareRevision_R ("AMC firmware version" , 0x108C, RW::ReadONLY, false, {}); /// R/
|
||||
const Reg DCOffset ("DC offset" , 0x1098, RW::ReadWrite, false, 0xFFFF, -1); /// R/W
|
||||
|
@ -821,7 +821,7 @@ namespace DPP {
|
|||
const std::pair<unsigned short, unsigned short> ChargeSensitivity = {3, 0} ; /// length, smallest pos
|
||||
const std::pair<unsigned short, unsigned short> InternalTestPulse = {1, 4};
|
||||
const std::pair<unsigned short, unsigned short> TestPulseRate = {2, 5};
|
||||
//const std::pair<unsigned short, unsigned short> OverThresholdWitdhEnable = {1, 7}; ///need firmware version 4.25 & 135.17
|
||||
const std::pair<unsigned short, unsigned short> OverThresholdWitdhEnable = {1, 7}; ///need firmware version 4.25 & 135.17
|
||||
const std::pair<unsigned short, unsigned short> ChargePedestal = {1, 8};
|
||||
const std::pair<unsigned short, unsigned short> InputSmoothingFactor = {3, 12};
|
||||
const std::pair<unsigned short, unsigned short> Polarity = {1, 16};
|
||||
|
@ -937,7 +937,7 @@ const std::vector<Reg> RegisterChannelList_QDC = {
|
|||
DPP::QDC::DPPAlgorithmControl,
|
||||
DPP::QDC::TriggerHoldOffWidth,
|
||||
DPP::QDC::TRGOUTWidth,
|
||||
//DPP::QDC::OverThresholdWidth,
|
||||
DPP::QDC::OverThresholdWidth,
|
||||
DPP::QDC::GroupStatus_R,
|
||||
DPP::QDC::AMCFirmwareRevision_R,
|
||||
DPP::QDC::DCOffset,
|
||||
|
|
Loading…
Reference in New Issue
Block a user