This commit is contained in:
徐海 2026-05-27 17:53:11 +08:00
parent 1f750a6f17
commit 1a2afa2416
3 changed files with 29 additions and 22 deletions

View File

@ -7,6 +7,14 @@
BackgroundTaskListView::BackgroundTaskListView(QWidget* parent) BackgroundTaskListView::BackgroundTaskListView(QWidget* parent)
: QTableView(parent) : QTableView(parent)
{ {
this->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
QPalette palette = this->palette();
palette.setColor(QPalette::Base, Qt::gray);
palette.setColor(QPalette::Text, Qt::white);
this->setPalette(palette);
this->setAutoFillBackground(true);
this->setGridStyle(Qt::NoPen);
this->setModel(BackgroundTaskListModel::Instance()); this->setModel(BackgroundTaskListModel::Instance());
this->verticalHeader()->setVisible(false); this->verticalHeader()->setVisible(false);
@ -17,8 +25,6 @@ BackgroundTaskListView::BackgroundTaskListView(QWidget* parent)
this->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); this->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
this->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); this->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
this->setGridStyle(Qt::NoPen);
} }
// ProgressBarItem::ProgressBarItem(const QString &text, QWidget *parent) // ProgressBarItem::ProgressBarItem(const QString &text, QWidget *parent)

View File

@ -695,22 +695,28 @@ bool ChannelEnergyScaleFittingTask::processTask()
if (fit_degree <= 0) { if (fit_degree <= 0) {
continue; continue;
} }
std::vector<double> vec_x, vec_y1, vec_y2; std::vector<double> vec_x_addr, vec_y_set_energy, vec_y_peak_fwhm;
for (const int& addr : energy_scale_fit_data.keys()) { for (const int& addr : energy_scale_fit_data.keys()) {
vec_x.push_back(addr); vec_x_addr.push_back(addr);
vec_y1.push_back(energy_scale_fit_data.value(addr)[0]); vec_y_set_energy.push_back(energy_scale_fit_data.value(addr)[0]);
vec_y2.push_back(energy_scale_fit_data.value(addr)[1]); vec_y_peak_fwhm.push_back(energy_scale_fit_data.value(addr)[1]);
} }
std::vector<double> energy_scale_fit_result_coeffs; std::vector<double> energy_scale_fit_result_coeffs;
try { try {
energy_scale_fit_result_coeffs = GaussPolyCoe::PolynomialFit(vec_x, vec_y1, fit_degree); energy_scale_fit_result_coeffs = GaussPolyCoe::PolynomialFit(vec_x_addr, vec_y_set_energy, fit_degree);
} catch(const std::exception& e) { } catch(const std::exception& e) {
QString error = QStringLiteral(u"[%1]%2能量刻度多项式%3次拟合异常:%4!").arg(this->GetProjectName()).arg(channel).arg(fit_degree).arg(QString::fromStdString(e.what())); QString error = QStringLiteral(u"[%1]%2能量刻度多项式%3次拟合异常:%4!").arg(this->GetProjectName()).arg(channel).arg(fit_degree).arg(QString::fromStdString(e.what()));
LOG_WARN(error); LOG_WARN(error);
} }
std::vector<double> vec_fit_energy;
for (int i = 0; i < vec_x_addr.size(); i++) {
int addr = vec_x_addr[i];
double fit_energy = GaussPolyCoe::Predict(energy_scale_fit_result_coeffs, addr);
vec_fit_energy.push_back(fit_energy);
}
arma::vec fwhm_fit_result_coeffs; arma::vec fwhm_fit_result_coeffs;
try { try {
fwhm_fit_result_coeffs = NolinearLeastSquaresCurveFit::Lsqcurvefit(FwhmModel, vec_y1, vec_y2, { 1.0, 1.0 }); fwhm_fit_result_coeffs = NolinearLeastSquaresCurveFit::Lsqcurvefit(FwhmModel, vec_fit_energy, vec_y_peak_fwhm, { 1.0, 1.0 });
} catch(const std::exception& e) { } catch(const std::exception& e) {
QString error = QStringLiteral(u"[%1]%2分辨率拟合异常:%3!").arg(this->GetProjectName()).arg(channel).arg(QString::fromStdString(e.what())); QString error = QStringLiteral(u"[%1]%2分辨率拟合异常:%3!").arg(this->GetProjectName()).arg(channel).arg(QString::fromStdString(e.what()));
LOG_WARN(error); LOG_WARN(error);
@ -719,11 +725,11 @@ bool ChannelEnergyScaleFittingTask::processTask()
LOG_INFO(info); LOG_INFO(info);
std::vector<std::vector<double> > fit_result_data; std::vector<std::vector<double> > fit_result_data;
for (int i = 0; i < vec_x.size(); i++) { for (int i = 0; i < vec_x_addr.size(); i++) {
int addr = vec_x[i]; int addr = vec_x_addr[i];
double set_energy = vec_y1[i]; double set_energy = vec_y_set_energy[i];
double fit_energy = GaussPolyCoe::Predict(energy_scale_fit_result_coeffs, addr); double fit_energy = vec_fit_energy[i];
double peak_fwhm = vec_y2[i]; double peak_fwhm = vec_y_peak_fwhm[i];
double fit_fwhm = FwhmModel(addr, fwhm_fit_result_coeffs); double fit_fwhm = FwhmModel(addr, fwhm_fit_result_coeffs);
std::vector<double> fit_result_item_data; std::vector<double> fit_result_item_data;
fit_result_item_data.push_back(addr); fit_result_item_data.push_back(addr);
@ -965,7 +971,7 @@ bool EnergyScaleCoincidenceDataTask::processTask()
data_item.energy = GaussPolyCoe::Predict(coeffs, data_item.energy); data_item.energy = GaussPolyCoe::Predict(coeffs, data_item.energy);
out_stream << event_id << "," << data_item.board_id << "," << data_item.channel_id << "," << data_item.energy << "," << data_item.timestamp << "\n" ; out_stream << event_id << "," << data_item.board_id << "," << data_item.channel_id << "," << data_item.energy << "," << data_item.timestamp << "\n" ;
} else { } else {
LOG_WARN(QStringLiteral(u"[%1]符合能谱数据处理异常:%2能量刻度拟合参数为空!").arg(this->GetProjectName()).arg(channel_name)); // LOG_WARN(QStringLiteral(u"[%1]符合能谱数据处理异常:%2能量刻度拟合参数为空!").arg(this->GetProjectName()).arg(channel_name));
// out_stream.close(); // out_stream.close();
// QFile::remove(coincidence_energy_data_filename); // QFile::remove(coincidence_energy_data_filename);
// return false; // return false;
@ -1057,7 +1063,7 @@ bool EnergyScaleaAntiCoincidenceDataTask::processTask()
data_item.energy = GaussPolyCoe::Predict(coeffs, data_item.energy); data_item.energy = GaussPolyCoe::Predict(coeffs, data_item.energy);
out_stream << time_window << "," << data_item.board_id << "," << data_item.channel_id << "," << data_item.energy << "," << data_item.timestamp << "\n" ; out_stream << time_window << "," << data_item.board_id << "," << data_item.channel_id << "," << data_item.energy << "," << data_item.timestamp << "\n" ;
} else { } else {
LOG_WARN(QStringLiteral(u"[%1]符合能谱数据处理异常:%2能量刻度拟合参数为空!").arg(this->GetProjectName()).arg(channel_name)); // LOG_WARN(QStringLiteral(u"[%1]符合能谱数据处理异常:%2能量刻度拟合参数为空!").arg(this->GetProjectName()).arg(channel_name));
} }
} }
out_stream.close(); out_stream.close();

View File

@ -308,11 +308,6 @@ void MainWindow::initAction()
void MainWindow::initStatusBar() void MainWindow::initStatusBar()
{ {
_w_watcher_task_list = new BackgroundTaskListView(this); _w_watcher_task_list = new BackgroundTaskListView(this);
_w_watcher_task_list->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
QPalette palette = _w_watcher_task_list->palette();
palette.setColor(QPalette::Base, Qt::gray);
_w_watcher_task_list->setPalette(palette);
_w_watcher_task_list->setAutoFillBackground(true);
_btn_task_watcher = new QPushButton(QStringLiteral(u"后台任务监视"), _status_bar); _btn_task_watcher = new QPushButton(QStringLiteral(u"后台任务监视"), _status_bar);
_status_bar->addPermanentWidget(_btn_task_watcher); _status_bar->addPermanentWidget(_btn_task_watcher);