优化多通道能量刻度编辑
This commit is contained in:
parent
25cc07917b
commit
73d4544880
|
|
@ -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()) {
|
||||||
|
|
|
||||||
|
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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">
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user