优化多通道能量刻度编辑

This commit is contained in:
徐海 2026-03-19 23:36:29 +08:00
parent 25cc07917b
commit 73d4544880
7 changed files with 96 additions and 76 deletions

View File

@ -676,7 +676,7 @@ bool ChannelEnergyScaleFittingTask::IsValidSetWorkParameters() const
bool ChannelEnergyScaleFittingTask::processTask() bool ChannelEnergyScaleFittingTask::processTask()
{ {
QDir result_dir(this->_result_dir); QDir result_dir(this->_result_dir);
const QString& energy_scale_data_filename = result_dir.filePath(QStringLiteral(u"多通道能量刻度拟合.json")); const QString& energy_scale_data_filename = result_dir.filePath(QStringLiteral(u"多通道能量刻度拟合结果.json"));
EnergyScaleDataModel energy_scale_data_model(energy_scale_data_filename); EnergyScaleDataModel energy_scale_data_model(energy_scale_data_filename);
for (const QString& channel : this->_channel_energy_scale_fit_data_map.keys()) { for (const QString& channel : this->_channel_energy_scale_fit_data_map.keys()) {

View File

@ -6,9 +6,6 @@
EnergyScaleDataModel::EnergyScaleDataModel(const QString& filename) : _data_filename(filename) EnergyScaleDataModel::EnergyScaleDataModel(const QString& filename) : _data_filename(filename)
{ {
_data_filename = filename; _data_filename = filename;
if (!_data_filename.isEmpty()) {
LoadData();
}
} }
EnergyScaleDataModel::~EnergyScaleDataModel() EnergyScaleDataModel::~EnergyScaleDataModel()
@ -19,9 +16,6 @@ EnergyScaleDataModel::~EnergyScaleDataModel()
void EnergyScaleDataModel::SetDataFilename(const QString& filename) void EnergyScaleDataModel::SetDataFilename(const QString& filename)
{ {
_data_filename = filename; _data_filename = filename;
if (!_data_filename.isEmpty()) {
LoadData();
}
} }
bool EnergyScaleDataModel::LoadData() bool EnergyScaleDataModel::LoadData()
@ -64,6 +58,18 @@ bool EnergyScaleDataModel::IsValid()
return b_is_valid; return b_is_valid;
} }
void EnergyScaleDataModel::SetChannelEnergyScaleDataMap(const QString& channel_name, const QVariantMap& ch_energy_scale_data_map)
{
if (!ch_energy_scale_data_map.isEmpty()) {
this->_energy_scale_data_map[channel_name] = ch_energy_scale_data_map;
}
}
QVariantMap EnergyScaleDataModel::GetChannelEnergyScaleDataMap(const QString& channel_name)
{
return _energy_scale_data_map.value(channel_name, QVariantMap()).toMap();
}
void EnergyScaleDataModel::SetEnergyFitDegree(const QString& channel_name, int fit_degree) void EnergyScaleDataModel::SetEnergyFitDegree(const QString& channel_name, int fit_degree)
{ {
if (!_energy_scale_data_map.contains(channel_name)) { if (!_energy_scale_data_map.contains(channel_name)) {
@ -76,6 +82,7 @@ void EnergyScaleDataModel::SetEnergyFitDegree(const QString& channel_name, int f
energy_scale_ch_data_map["EnergyFitDegree"] = fit_degree; energy_scale_ch_data_map["EnergyFitDegree"] = fit_degree;
} }
_energy_scale_data_map[channel_name] = energy_scale_ch_data_map; _energy_scale_data_map[channel_name] = energy_scale_ch_data_map;
cleanEmptyItem();
} }
int EnergyScaleDataModel::GetEnergyFitDegree(const QString& channel_name) int EnergyScaleDataModel::GetEnergyFitDegree(const QString& channel_name)
@ -98,12 +105,13 @@ void EnergyScaleDataModel::SetEnergyFitResultCoeffs(const QString& channel_name,
coeffs_list.append(coeff); coeffs_list.append(coeff);
} }
QVariantMap energy_scale_ch_data_map = _energy_scale_data_map[channel_name].toMap(); QVariantMap energy_scale_ch_data_map = _energy_scale_data_map[channel_name].toMap();
if ( coeffs_list.empty() ) { if ( coeffs_list.isEmpty() ) {
energy_scale_ch_data_map.remove("EnergyFitResultCoeffs"); energy_scale_ch_data_map.remove("EnergyFitResultCoeffs");
} else { } else {
energy_scale_ch_data_map["EnergyFitResultCoeffs"] = coeffs_list; energy_scale_ch_data_map["EnergyFitResultCoeffs"] = coeffs_list;
} }
_energy_scale_data_map[channel_name] = energy_scale_ch_data_map; _energy_scale_data_map[channel_name] = energy_scale_ch_data_map;
cleanEmptyItem();
} }
std::vector<double> EnergyScaleDataModel::GetEnergyFitResultCoeffs(const QString& channel_name) std::vector<double> EnergyScaleDataModel::GetEnergyFitResultCoeffs(const QString& channel_name)
@ -129,12 +137,13 @@ void EnergyScaleDataModel::SetFwhmFitResultCoeffs(const QString& channel_name, s
coeffs_list.append(coeff); coeffs_list.append(coeff);
} }
QVariantMap energy_scale_ch_data_map = _energy_scale_data_map[channel_name].toMap(); QVariantMap energy_scale_ch_data_map = _energy_scale_data_map[channel_name].toMap();
if ( coeffs_list.empty() ) { if ( coeffs_list.isEmpty() ) {
energy_scale_ch_data_map.remove("FwhmFitResultCoeffs"); energy_scale_ch_data_map.remove("FwhmFitResultCoeffs");
} else { } else {
energy_scale_ch_data_map["FwhmFitResultCoeffs"] = coeffs_list; energy_scale_ch_data_map["FwhmFitResultCoeffs"] = coeffs_list;
} }
_energy_scale_data_map[channel_name] = energy_scale_ch_data_map; _energy_scale_data_map[channel_name] = energy_scale_ch_data_map;
cleanEmptyItem();
} }
std::vector<double> EnergyScaleDataModel::GetFwhmFitResultCoeffs(const QString& channel_name) std::vector<double> EnergyScaleDataModel::GetFwhmFitResultCoeffs(const QString& channel_name)
@ -164,8 +173,13 @@ void EnergyScaleDataModel::SetFitData(const QString& channel_name, const std::ve
fit_data_list.append(QVariant(fit_list)); fit_data_list.append(QVariant(fit_list));
} }
QVariantMap energy_scale_ch_data_map = _energy_scale_data_map[channel_name].toMap(); QVariantMap energy_scale_ch_data_map = _energy_scale_data_map[channel_name].toMap();
energy_scale_ch_data_map["FitData"] = fit_data_list; if ( fit_data_list.isEmpty() ) {
energy_scale_ch_data_map.remove("FitData");
} else {
energy_scale_ch_data_map["FitData"] = fit_data_list;
}
_energy_scale_data_map[channel_name] = energy_scale_ch_data_map; _energy_scale_data_map[channel_name] = energy_scale_ch_data_map;
cleanEmptyItem();
} }
std::vector<std::vector<double> > EnergyScaleDataModel::GetFitData(const QString& channel_name) std::vector<std::vector<double> > EnergyScaleDataModel::GetFitData(const QString& channel_name)
@ -183,4 +197,13 @@ std::vector<std::vector<double> > EnergyScaleDataModel::GetFitData(const QString
} }
} }
return fit_data; return fit_data;
}
void EnergyScaleDataModel::cleanEmptyItem()
{
for (auto it = _energy_scale_data_map.begin(); it != _energy_scale_data_map.end(); it++) {
if (it.value().toMap().isEmpty()) {
_energy_scale_data_map.remove(it.key());
}
}
} }

View File

@ -16,6 +16,9 @@ public:
bool SaveData(); bool SaveData();
bool IsValid(); bool IsValid();
void SetChannelEnergyScaleDataMap(const QString& channel_name, const QVariantMap& ch_energy_scale_data_map);
QVariantMap GetChannelEnergyScaleDataMap(const QString& channel_name);
void SetEnergyFitDegree(const QString& channel_name, int fit_degree); void SetEnergyFitDegree(const QString& channel_name, int fit_degree);
int GetEnergyFitDegree(const QString& channel_name); int GetEnergyFitDegree(const QString& channel_name);
@ -28,6 +31,9 @@ public:
void SetFitData(const QString& channel_name, const std::vector<std::vector<double> >& fit_data); void SetFitData(const QString& channel_name, const std::vector<std::vector<double> >& fit_data);
std::vector<std::vector<double> > GetFitData(const QString& channel_name); std::vector<std::vector<double> > GetFitData(const QString& channel_name);
private:
void cleanEmptyItem();
private: private:
QString _data_filename; QString _data_filename;
QVariantMap _energy_scale_data_map; QVariantMap _energy_scale_data_map;

View File

@ -79,6 +79,7 @@ BatchEnergyScaleDialog::BatchEnergyScaleDialog(QWidget* parent)
} }
}); });
connect(ui->btn_remove_selected, &QPushButton::clicked, [this](){ connect(ui->btn_remove_selected, &QPushButton::clicked, [this](){
QStringList changed_ch_name_list;
auto row_count = ui->tablew_process_data->rowCount(); auto row_count = ui->tablew_process_data->rowCount();
for (int row = row_count - 1; row >= 0; --row) { for (int row = row_count - 1; row >= 0; --row) {
QTableWidgetItem* item = ui->tablew_process_data->item(row, 0); QTableWidgetItem* item = ui->tablew_process_data->item(row, 0);
@ -86,19 +87,15 @@ BatchEnergyScaleDialog::BatchEnergyScaleDialog(QWidget* parent)
continue; continue;
QPushButton* btn_remove_row = dynamic_cast<QPushButton*>(ui->tablew_process_data->cellWidget(row, 8)); QPushButton* btn_remove_row = dynamic_cast<QPushButton*>(ui->tablew_process_data->cellWidget(row, 8));
if (btn_remove_row) { if (btn_remove_row) {
ui->tablew_process_data->removeRow(row);
btn_remove_row->deleteLater(); btn_remove_row->deleteLater();
this->updateSetEnergyFilter();
} }
changed_ch_name_list.append(item->text());
ui->tablew_process_data->removeRow(row);
this->updateSetEnergyFilter();
} }
if ( row_count > ui->tablew_process_data->rowCount() ) { this->energyScaleDataChanged(changed_ch_name_list);
this->saveEnergyScaleData();
}
}); });
connect(ui->btn_fit, &QPushButton::clicked, this, &BatchEnergyScaleDialog::onFitBtnClickedProcess); connect(ui->btn_fit, &QPushButton::clicked, this, &BatchEnergyScaleDialog::onFitBtnClickedProcess);
connect(ui->btn_save, &QPushButton::clicked, [this](){
this->saveEnergyScaleData();
});
connect(ui->btn_apply, &QPushButton::clicked, [this](){ connect(ui->btn_apply, &QPushButton::clicked, [this](){
this->applyEnergyScaleFitResultData(); this->applyEnergyScaleFitResultData();
}); });
@ -131,7 +128,6 @@ void BatchEnergyScaleDialog::SetPeakResultDataModel(QAbstractTableModel* peaks_r
void BatchEnergyScaleDialog::SetViewWorkspace(const QString &workspace) void BatchEnergyScaleDialog::SetViewWorkspace(const QString &workspace)
{ {
this->_workspace = workspace; this->_workspace = workspace;
QDir workspace_dir(this->_workspace); QDir workspace_dir(this->_workspace);
const QString& energy_scale_data_filename = workspace_dir.filePath(QStringLiteral(u"多通道能量刻度拟合.json")); const QString& energy_scale_data_filename = workspace_dir.filePath(QStringLiteral(u"多通道能量刻度拟合.json"));
this->_energy_scale_data_model->SetDataFilename(energy_scale_data_filename); this->_energy_scale_data_model->SetDataFilename(energy_scale_data_filename);
@ -173,7 +169,7 @@ void BatchEnergyScaleDialog::onSelectedScaleRange(double min, double max)
layout->addLayout(layout_btns); layout->addLayout(layout_btns);
if (QDialog::Accepted == set_energy_dlg.exec()) { if (QDialog::Accepted == set_energy_dlg.exec()) {
bool b_has_new_data = false; QStringList changed_ch_name_list;
double set_energy = spinbox_set_energy->value(); double set_energy = spinbox_set_energy->value();
for (int i = 0; i < _peaks_result_model->rowCount(); i++) { for (int i = 0; i < _peaks_result_model->rowCount(); i++) {
const QString& channel_name = _peaks_result_model->data(_peaks_result_model->index(i, 0)).toString(); const QString& channel_name = _peaks_result_model->data(_peaks_result_model->index(i, 0)).toString();
@ -195,22 +191,20 @@ void BatchEnergyScaleDialog::onSelectedScaleRange(double min, double max)
ui->tablew_process_data->setItem(row, 8, item); ui->tablew_process_data->setItem(row, 8, item);
QPushButton* btn_remove_row = new QPushButton(QStringLiteral(u"删除")); QPushButton* btn_remove_row = new QPushButton(QStringLiteral(u"删除"));
btn_remove_row->setMaximumWidth(35); btn_remove_row->setMaximumWidth(35);
connect(btn_remove_row, &QPushButton::clicked, [this, item, btn_remove_row]() { connect(btn_remove_row, &QPushButton::clicked, [this, channel_name, item, btn_remove_row]() {
item->setCheckState(Qt::Unchecked); item->setCheckState(Qt::Unchecked);
int remove_row = item->row(); int remove_row = item->row();
ui->tablew_process_data->removeRow(remove_row); ui->tablew_process_data->removeRow(remove_row);
btn_remove_row->deleteLater(); btn_remove_row->deleteLater();
this->updateSetEnergyFilter(); this->updateSetEnergyFilter();
this->saveEnergyScaleData(); this->energyScaleDataChanged({channel_name});
}); });
ui->tablew_process_data->setCellWidget(row, 8, btn_remove_row); ui->tablew_process_data->setCellWidget(row, 8, btn_remove_row);
this->insertSetEnergyValueToFilter(set_energy); this->insertSetEnergyValueToFilter(set_energy);
b_has_new_data = true; changed_ch_name_list.append(channel_name);
} }
} }
if (b_has_new_data) { this->energyScaleDataChanged(changed_ch_name_list);
this->saveEnergyScaleData();
}
} }
} }
@ -275,13 +269,13 @@ void BatchEnergyScaleDialog::LoadEnergyScaleData()
ui->tablew_process_data->setItem(row, 8, item); ui->tablew_process_data->setItem(row, 8, item);
QPushButton* btn_remove_row = new QPushButton(QStringLiteral(u"删除")); QPushButton* btn_remove_row = new QPushButton(QStringLiteral(u"删除"));
btn_remove_row->setMaximumWidth(35); btn_remove_row->setMaximumWidth(35);
connect(btn_remove_row, &QPushButton::clicked, [this, item, btn_remove_row]() { connect(btn_remove_row, &QPushButton::clicked, [this, channel_name, item, btn_remove_row]() {
item->setCheckState(Qt::Unchecked); item->setCheckState(Qt::Unchecked);
int remove_row = item->row(); int remove_row = item->row();
ui->tablew_process_data->removeRow(remove_row); ui->tablew_process_data->removeRow(remove_row);
btn_remove_row->deleteLater(); btn_remove_row->deleteLater();
this->updateSetEnergyFilter(); this->updateSetEnergyFilter();
this->saveEnergyScaleData(); this->energyScaleDataChanged({channel_name});
}); });
ui->tablew_process_data->setCellWidget(row, 8, btn_remove_row); ui->tablew_process_data->setCellWidget(row, 8, btn_remove_row);
this->insertSetEnergyValueToFilter(fit_data_item[1]); this->insertSetEnergyValueToFilter(fit_data_item[1]);
@ -289,37 +283,6 @@ void BatchEnergyScaleDialog::LoadEnergyScaleData()
} }
} }
void BatchEnergyScaleDialog::saveEnergyScaleData()
{
QMap<QString, std::vector<std::vector<double> > > fit_data;
for (int i = 0; i < ui->tablew_process_data->rowCount(); i++) {
std::vector<double> fit_data_item;
const QString& channel_name = ui->tablew_process_data->item(i, 0)->text();
double peak_pos_addr = ui->tablew_process_data->item(i, 1)->text().toDouble();
double set_energy = ui->tablew_process_data->item(i, 2)->text().toDouble();
double fit_energy = ui->tablew_process_data->item(i, 3)->text().toDouble();
double energy_diff = ui->tablew_process_data->item(i, 4)->text().toDouble();
double peak_fwhm = ui->tablew_process_data->item(i, 5)->text().toDouble();
double fit_fwhm = ui->tablew_process_data->item(i, 6)->text().toDouble();
double fwhm_diff = ui->tablew_process_data->item(i, 7)->text().toDouble();
fit_data_item.push_back(peak_pos_addr);
fit_data_item.push_back(set_energy);
fit_data_item.push_back(fit_energy);
fit_data_item.push_back(energy_diff);
fit_data_item.push_back(peak_fwhm);
fit_data_item.push_back(fit_fwhm);
fit_data_item.push_back(fwhm_diff);
fit_data[channel_name].push_back(fit_data_item);
}
for (const QString& channel_name : fit_data.keys()) {
this->_energy_scale_data_model->SetFitData(channel_name, fit_data[channel_name]);
this->_energy_scale_data_model->SetEnergyFitDegree(channel_name, 0);
this->_energy_scale_data_model->SetEnergyFitResultCoeffs(channel_name, {});
this->_energy_scale_data_model->SetFwhmFitResultCoeffs(channel_name, {});
}
this->_energy_scale_data_model->SaveData();
}
void BatchEnergyScaleDialog::onFitBtnClickedProcess() void BatchEnergyScaleDialog::onFitBtnClickedProcess()
{ {
QMap<QString, int> fit_degree_map; QMap<QString, int> fit_degree_map;
@ -347,7 +310,6 @@ void BatchEnergyScaleDialog::onFitBtnClickedProcess()
return; return;
} }
if (!channel_energy_scale_fit_data_map.empty()) { if (!channel_energy_scale_fit_data_map.empty()) {
ui->btn_apply->setEnabled(false);
auto channel_erergy_scale_fit_task = new DataProcessWorkPool::ChannelEnergyScaleFittingTask; auto channel_erergy_scale_fit_task = new DataProcessWorkPool::ChannelEnergyScaleFittingTask;
channel_erergy_scale_fit_task->SetResultDir(this->_workspace); channel_erergy_scale_fit_task->SetResultDir(this->_workspace);
channel_erergy_scale_fit_task->SetData(channel_energy_scale_fit_data_map, fit_degree_map); channel_erergy_scale_fit_task->SetData(channel_energy_scale_fit_data_map, fit_degree_map);
@ -359,6 +321,16 @@ void BatchEnergyScaleDialog::onFitBtnClickedProcess()
void BatchEnergyScaleDialog::onEnergyScaleFitFinished(const QString &project_name) void BatchEnergyScaleDialog::onEnergyScaleFitFinished(const QString &project_name)
{ {
Q_UNUSED(project_name); Q_UNUSED(project_name);
QDir result_dir(this->_workspace);
const QString& result_filename = result_dir.filePath(QStringLiteral(u"多通道能量刻度拟合结果.json"));
EnergyScaleDataModel result_model(result_filename);
result_model.LoadData();
for (const QString& channel_name : this->_channel_name_list) {
const QVariantMap& ch_energy_scale_data_map = result_model.GetChannelEnergyScaleDataMap(channel_name);
this->_energy_scale_data_model->SetChannelEnergyScaleDataMap(channel_name, ch_energy_scale_data_map);
}
this->_energy_scale_data_model->SaveData();
QFile::remove(result_filename);
this->LoadEnergyScaleData(); this->LoadEnergyScaleData();
} }
@ -381,10 +353,38 @@ void BatchEnergyScaleDialog::applyEnergyScaleFitResultData()
} }
} }
void BatchEnergyScaleDialog::energyScaleDataChange() void BatchEnergyScaleDialog::energyScaleDataChanged(const QStringList &channel_name_list)
{ {
this->_is_fit_finished = false; QMap<QString, std::vector<std::vector<double> > > ch_fit_data;
ui->btn_apply->setEnabled(false); for (int i = 0; i < ui->tablew_process_data->rowCount(); i++) {
const QString& channel_name = ui->tablew_process_data->item(i, 0)->text();
if ( !channel_name_list.contains(channel_name) ) {
continue;
}
std::vector<double> fit_data_item;
double peak_pos_addr = ui->tablew_process_data->item(i, 1)->text().toDouble();
double set_energy = ui->tablew_process_data->item(i, 2)->text().toDouble();
double fit_energy = ui->tablew_process_data->item(i, 3)->text().toDouble();
double energy_diff = ui->tablew_process_data->item(i, 4)->text().toDouble();
double peak_fwhm = ui->tablew_process_data->item(i, 5)->text().toDouble();
double fit_fwhm = ui->tablew_process_data->item(i, 6)->text().toDouble();
double fwhm_diff = ui->tablew_process_data->item(i, 7)->text().toDouble();
fit_data_item.push_back(peak_pos_addr);
fit_data_item.push_back(set_energy);
fit_data_item.push_back(fit_energy);
fit_data_item.push_back(energy_diff);
fit_data_item.push_back(peak_fwhm);
fit_data_item.push_back(fit_fwhm);
fit_data_item.push_back(fwhm_diff);
ch_fit_data[channel_name].push_back(fit_data_item);
}
for (const QString& channel_name : ch_fit_data.keys()) {
this->_energy_scale_data_model->SetFitData(channel_name, ch_fit_data[channel_name]);
this->_energy_scale_data_model->SetEnergyFitDegree(channel_name, 0);
this->_energy_scale_data_model->SetEnergyFitResultCoeffs(channel_name, {});
this->_energy_scale_data_model->SetFwhmFitResultCoeffs(channel_name, {});
}
this->_energy_scale_data_model->SaveData();
} }
void BatchEnergyScaleDialog::closeEvent(QCloseEvent *e) void BatchEnergyScaleDialog::closeEvent(QCloseEvent *e)

View File

@ -33,9 +33,8 @@ private slots:
private: private:
void insertSetEnergyValueToFilter(double energy); void insertSetEnergyValueToFilter(double energy);
void updateSetEnergyFilter(); void updateSetEnergyFilter();
void saveEnergyScaleData();
void applyEnergyScaleFitResultData(); void applyEnergyScaleFitResultData();
void energyScaleDataChange(); void energyScaleDataChanged(const QStringList& channel_name_list);
signals: signals:
void close(); void close();
@ -49,7 +48,6 @@ private:
QStringList _channel_name_list; QStringList _channel_name_list;
QString _workspace; QString _workspace;
QAbstractTableModel* _peaks_result_model; QAbstractTableModel* _peaks_result_model;
bool _is_fit_finished = false;
std::unique_ptr<EnergyScaleDataModel> _energy_scale_data_model; std::unique_ptr<EnergyScaleDataModel> _energy_scale_data_model;
}; };

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>929</width> <width>785</width>
<height>404</height> <height>435</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -109,13 +109,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QPushButton" name="btn_save">
<property name="text">
<string>保存</string>
</property>
</widget>
</item>
<item> <item>
<widget class="QPushButton" name="btn_apply"> <widget class="QPushButton" name="btn_apply">
<property name="text"> <property name="text">

View File

@ -74,6 +74,7 @@ void MeasureAnalysisParticleCountPlotView::InitViewWorkspace(const QString& proj
_batch_energy_scale_dlg->SetProjectName(project_name); _batch_energy_scale_dlg->SetProjectName(project_name);
_batch_energy_scale_dlg->SetViewWorkspace(workspace); _batch_energy_scale_dlg->SetViewWorkspace(workspace);
_batch_energy_scale_dlg->SetPeakResultDataModel(_find_peaks_result_dlg->GetPeakResultDataModel());
} }
void MeasureAnalysisParticleCountPlotView::SetAnalyzeDataFilename(const QMap<QString, QVariant>& data_files_set) void MeasureAnalysisParticleCountPlotView::SetAnalyzeDataFilename(const QMap<QString, QVariant>& data_files_set)
@ -188,7 +189,6 @@ void MeasureAnalysisParticleCountPlotView::setupEnergyScaleDlg()
{ {
if (!_batch_energy_scale_dlg) { if (!_batch_energy_scale_dlg) {
_batch_energy_scale_dlg = new BatchEnergyScaleDialog(this); _batch_energy_scale_dlg = new BatchEnergyScaleDialog(this);
_batch_energy_scale_dlg->SetPeakResultDataModel(_find_peaks_result_dlg->GetPeakResultDataModel());
connect(_data_selector, &CustomQwtPlotXaxisSelector::selectionFinished, _batch_energy_scale_dlg, &BatchEnergyScaleDialog::onSelectedScaleRange); connect(_data_selector, &CustomQwtPlotXaxisSelector::selectionFinished, _batch_energy_scale_dlg, &BatchEnergyScaleDialog::onSelectedScaleRange);
connect(_batch_energy_scale_dlg, &BatchEnergyScaleDialog::close, [this](){ connect(_batch_energy_scale_dlg, &BatchEnergyScaleDialog::close, [this](){
this->_data_selector->setEnabled(false); this->_data_selector->setEnabled(false);