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)
: 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->verticalHeader()->setVisible(false);
@ -17,8 +25,6 @@ BackgroundTaskListView::BackgroundTaskListView(QWidget* parent)
this->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
this->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
this->setGridStyle(Qt::NoPen);
}
// ProgressBarItem::ProgressBarItem(const QString &text, QWidget *parent)

View File

@ -695,35 +695,41 @@ bool ChannelEnergyScaleFittingTask::processTask()
if (fit_degree <= 0) {
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()) {
vec_x.push_back(addr);
vec_y1.push_back(energy_scale_fit_data.value(addr)[0]);
vec_y2.push_back(energy_scale_fit_data.value(addr)[1]);
vec_x_addr.push_back(addr);
vec_y_set_energy.push_back(energy_scale_fit_data.value(addr)[0]);
vec_y_peak_fwhm.push_back(energy_scale_fit_data.value(addr)[1]);
}
std::vector<double> energy_scale_fit_result_coeffs;
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) {
QString error = QStringLiteral(u"[%1]%2能量刻度多项式%3次拟合异常:%4!").arg(this->GetProjectName()).arg(channel).arg(fit_degree).arg(QString::fromStdString(e.what()));
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;
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) {
QString error = QStringLiteral(u"[%1]%2分辨率拟合异常:%3!").arg(this->GetProjectName()).arg(channel).arg(QString::fromStdString(e.what()));
LOG_WARN(error);
}
const QString& info = QStringLiteral(u"[%1]%2能量刻度拟合完成.").arg(this->GetProjectName()).arg(channel);
LOG_INFO(info);
std::vector<std::vector<double> > fit_result_data;
for (int i = 0; i < vec_x.size(); i++) {
int addr = vec_x[i];
double set_energy = vec_y1[i];
double fit_energy = GaussPolyCoe::Predict(energy_scale_fit_result_coeffs, addr);
double peak_fwhm = vec_y2[i];
for (int i = 0; i < vec_x_addr.size(); i++) {
int addr = vec_x_addr[i];
double set_energy = vec_y_set_energy[i];
double fit_energy = vec_fit_energy[i];
double peak_fwhm = vec_y_peak_fwhm[i];
double fit_fwhm = FwhmModel(addr, fwhm_fit_result_coeffs);
std::vector<double> fit_result_item_data;
fit_result_item_data.push_back(addr);
@ -744,7 +750,7 @@ bool ChannelEnergyScaleFittingTask::processTask()
if (!energy_scale_data_model.SaveData()) {
return false;
}
const QString& info = QStringLiteral(u"[%1]能量刻度拟合完成.").arg(this->GetProjectName());
LOG_INFO(info);
return true;
@ -965,7 +971,7 @@ bool EnergyScaleCoincidenceDataTask::processTask()
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" ;
} 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();
// QFile::remove(coincidence_energy_data_filename);
// return false;
@ -1057,7 +1063,7 @@ bool EnergyScaleaAntiCoincidenceDataTask::processTask()
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" ;
} 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();

View File

@ -308,11 +308,6 @@ void MainWindow::initAction()
void MainWindow::initStatusBar()
{
_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);
_status_bar->addPermanentWidget(_btn_task_watcher);