From 3a09022a293cec8570f928cc93de5a331a6606b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B5=B7?= Date: Thu, 26 Mar 2026 14:48:12 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=A6=E5=90=88=E6=95=B0=E6=8D=AE=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DataProcessWorkPool.cpp | 24 +- .../EnergyCountPlotView.cpp | 5 +- src/MainWindow.cpp | 2 + src/MeasureAnalysisProjectModel.cpp | 238 ++++++++++-------- src/MeasureAnalysisProjectModel.h | 4 +- src/MeasureAnalysisTreeView.cpp | 21 ++ 6 files changed, 184 insertions(+), 110 deletions(-) diff --git a/src/DataProcessWorkPool.cpp b/src/DataProcessWorkPool.cpp index f6bd67d..f2fd73b 100644 --- a/src/DataProcessWorkPool.cpp +++ b/src/DataProcessWorkPool.cpp @@ -466,6 +466,7 @@ bool CoincidenceEventAnalysisTask::processTask() if (particle_data_filename.isEmpty()) { return false; } + std::string event_id_str = QString(QStringLiteral(u"事件ID")).toStdString(); std::string board_id_str = QString(QStringLiteral(u"板卡号")).toStdString(); std::string channel_id_str = QString(QStringLiteral(u"通道号")).toStdString(); std::string addr_str = QString(QStringLiteral(u"道址")).toStdString(); @@ -502,12 +503,14 @@ bool CoincidenceEventAnalysisTask::processTask() const QString& event_data_filename = QDir(coincidence_data_dir_path).filePath(QStringLiteral(u"[%1ns]%2个粒子符合事件[未刻度].csv").arg(project_model->GetConformTimeWin()).arg(event.coincidence_order)); if ( !coincidence_data_out_stream_map.contains(event.coincidence_order) ) { std::shared_ptr out_stream(new std::ofstream(QStrToSysPath(event_data_filename))); - *out_stream << board_id_str << "," << channel_id_str << "," << addr_str << "," << time_str << std::endl; + *out_stream << event_id_str << "," << board_id_str << "," << channel_id_str << "," << addr_str << "," << time_str << std::endl; coincidence_data_out_stream_map[event.coincidence_order] = out_stream; } + unsigned long long event_id = 0; std::shared_ptr out_stream = coincidence_data_out_stream_map[event.coincidence_order]; for (const SpectrumData& data_item : event.events) { - *out_stream << data_item.board_id << "," << data_item.channel_id << "," << data_item.energy << "," << data_item.timestamp << std::endl; + ++ event_id; + *out_stream << event_id << "," << data_item.board_id << "," << data_item.channel_id << "," << data_item.energy << "," << data_item.timestamp << std::endl; } project_model->SetTimeWinConformParticleData(project_model->GetConformTimeWin(), event.coincidence_order, event_data_filename); } @@ -866,6 +869,7 @@ bool EnergyScaleCoincidenceDataTask::processTask() project_dir.mkpath(coincidence_data_dir_name); const QString& coincidence_data_dir_path = project_dir.filePath(coincidence_data_dir_name); + std::string event_id_str = QString(QStringLiteral(u"事件ID")).toStdString(); std::string board_id_str = QString(QStringLiteral(u"板卡号")).toStdString(); std::string channel_id_str = QString(QStringLiteral(u"通道号")).toStdString(); std::string addr_str = QString(QStringLiteral(u"道址")).toStdString(); @@ -875,22 +879,24 @@ bool EnergyScaleCoincidenceDataTask::processTask() auto conformParticleDataEnergyScale = [&](int time_win, int coincidence_order, const QString& conform_particle_data_filename) -> bool { try { io::CSVReader< - 4, + 5, io::trim_chars<' ', '\t'>, io::double_quote_escape<',', '"'>, io::throw_on_overflow, io::empty_line_comment> reader(QStrToSysPath(conform_particle_data_filename)); - reader.read_header(io::ignore_extra_column, board_id_str, channel_id_str, addr_str, time_str); + reader.read_header(io::ignore_extra_column, event_id_str, board_id_str, channel_id_str, addr_str, time_str); const QString& data_name = QStringLiteral(u"[%1ns]%2个粒子符合事件.csv").arg(time_win).arg(coincidence_order); const QString& coincidence_energy_data_filename = QDir(coincidence_data_dir_path).filePath(data_name); std::ofstream out_stream(QStrToSysPath(coincidence_energy_data_filename)); - out_stream << board_id_str << "," << channel_id_str << "," << energy_str << "," << time_str << "\n" ; + out_stream << event_id_str << "," << board_id_str << "," << channel_id_str << "," << energy_str << "," << time_str << "\n" ; using namespace CoincidenceSpectrum::F2t9Order; + unsigned long long event_id; SpectrumData data_item; while (reader.read_row( + event_id, data_item.board_id, data_item.channel_id, data_item.energy, @@ -900,12 +906,12 @@ bool EnergyScaleCoincidenceDataTask::processTask() auto coeffs = energy_scale_data_model.GetEnergyFitResultCoeffs(channel_name); if (!coeffs.empty()) { data_item.energy = GaussPolyCoe::Predict(coeffs, data_item.energy); - out_stream << 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 { LOG_WARN(QStringLiteral(u"符合能谱数据处理异常:%1能量刻度拟合参数为空!").arg(channel_name)); - out_stream.close(); - QFile::remove(coincidence_energy_data_filename); - return false; + // out_stream.close(); + // QFile::remove(coincidence_energy_data_filename); + // return false; } } out_stream.close(); diff --git a/src/EnergyCountPlotView/EnergyCountPlotView.cpp b/src/EnergyCountPlotView/EnergyCountPlotView.cpp index 68afb89..5f1cfa7 100644 --- a/src/EnergyCountPlotView/EnergyCountPlotView.cpp +++ b/src/EnergyCountPlotView/EnergyCountPlotView.cpp @@ -13,6 +13,7 @@ #include #include #include +#include EnergyCountPlotView::EnergyCountPlotView(QWidget *parent) @@ -62,12 +63,12 @@ void EnergyCountPlotView::setupPlot() QwtPlotCanvas* canvas = qobject_cast(_plot->canvas()); canvas->setFrameStyle(QFrame::NoFrame); - _plot->setAxisTitle(QwtPlot::xBottom, QString(QStringLiteral(u"能量"))); + _plot->setAxisTitle(QwtPlot::xBottom, QString(QStringLiteral(u"能量(KeV)"))); _plot->setAxisTitle(QwtPlot::yLeft, QString(QStringLiteral(u"计数"))); // set axis auto scale _plot->setAxisAutoScale(QwtPlot::xBottom, true); _plot->setAxisAutoScale(QwtPlot::yLeft, true); - // 启用网格线 + _plot->enableAxis(QwtPlot::xBottom); _plot->enableAxis(QwtPlot::yLeft); diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 48b66f7..487f553 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -140,6 +140,8 @@ void MainWindow::initMainWindow() // 构建日志输出视图 _plain_edit_info_output = new QPlainTextEdit; _plain_edit_info_output->setReadOnly(true); + _plain_edit_info_output->setFrameShape(QFrame::NoFrame); + _plain_edit_info_output->setLineWidth(0); ads::CDockWidget* dockw_info_output = new ads::CDockWidget(QStringLiteral(u"信息输出")); dockw_info_output->setWidget(_plain_edit_info_output); dockw_info_output->setMinimumSizeHintMode(ads::CDockWidget::MinimumSizeHintFromContentMinimumSize); diff --git a/src/MeasureAnalysisProjectModel.cpp b/src/MeasureAnalysisProjectModel.cpp index 1783bdf..fe6eca7 100644 --- a/src/MeasureAnalysisProjectModel.cpp +++ b/src/MeasureAnalysisProjectModel.cpp @@ -245,6 +245,11 @@ const QMap MeasureAnalysisProjectModel::GetTimeWinConformParticle return conform_particle_data; } +const QMap > MeasureAnalysisProjectModel::GetConformParticleEnergyDataFilenameList() const +{ + return this->_time_win_conform_energy_data; +} + const QMap MeasureAnalysisProjectModel::GetTimeWinConformEnergyDataFilenameList(uint time_win) const { QMap conform_energy_data; @@ -851,40 +856,57 @@ void MeasureAnalysisProjectModelList::onEnergyScaleCoincidenceDataFinished(bool auto& node_map = this->_project_node_items[project_name]; bool status_ok = false; QString status = QStringLiteral(u"无效"); - uint conform_time_win = pro_model->GetConformTimeWin(); - const auto& Conform_energy_data_filename_list = pro_model->GetTimeWinConformEnergyDataFilenameList(conform_time_win); - if (!Conform_energy_data_filename_list.isEmpty()) { + auto time_win_file_name_set = pro_model->GetConformParticleEnergyDataFilenameList(); + if (!time_win_file_name_set.isEmpty()) { status_ok = true; status = QStringLiteral(u"有效"); - QString item_name = QStringLiteral(u"符合粒子能量数据[%1ns]").arg(conform_time_win); + QString item_name = QStringLiteral(u"符合粒子能量数据"); + QStandardItem* conform_energy_data_item = nullptr; if (node_map.contains(item_name)) { - auto energy_total_count_spec_item = node_map[item_name]; - this->SetNodeStatus(energy_total_count_spec_item, status, status_ok); + conform_energy_data_item = node_map[item_name]; + this->SetNodeStatus(conform_energy_data_item, status, status_ok); } - item_name = QStringLiteral(u"符合事件时间分析"); - if (node_map.contains(item_name)) { - auto energy_total_count_item = node_map[item_name]; - this->SetNodeStatus(energy_total_count_item, status, status_ok); - } - item_name = QStringLiteral(u"符合能谱[%1ns]").arg(conform_time_win); - if (node_map.contains(item_name)) { - auto energy_total_count_spec_item = node_map[item_name]; - this->SetNodeStatus(energy_total_count_spec_item, status, status_ok); - } - item_name = QStringLiteral(u"反符合能谱[%1ns]").arg(conform_time_win); - if (node_map.contains(item_name)) { - auto energy_total_count_spec_item = node_map[item_name]; - this->SetNodeStatus(energy_total_count_spec_item, status, status_ok); - } - item_name = QStringLiteral(u"二维符合能谱[%1ns]").arg(conform_time_win); - if (node_map.contains(item_name)) { - auto energy_total_count_spec_item = node_map[item_name]; - this->SetNodeStatus(energy_total_count_spec_item, status, status_ok); - } - item_name = QStringLiteral(u"三维符合能谱[%1ns]").arg(conform_time_win); - if (node_map.contains(item_name)) { - auto energy_total_count_spec_item = node_map[item_name]; - this->SetNodeStatus(energy_total_count_spec_item, status, status_ok); + for (int conform_time_win : time_win_file_name_set.keys()) { + const auto& conform_energy_data_filename_list = pro_model->GetTimeWinConformEnergyDataFilenameList(conform_time_win); + for (auto it = conform_energy_data_filename_list.constBegin(); it!=conform_energy_data_filename_list.constEnd(); ++it) { + int order = it.key(); + if (conform_energy_data_item) { + QString item_name = QStringLiteral(u"%1个粒子符合[%2ns]").arg(order).arg(conform_time_win); + if ( !node_map.contains(item_name) ) { + const QVariant& analys_type = QVariant::fromValue(AnalysisType::CoincidenceParticleEnergyData); + QStandardItem* node_item = AddChildNode(conform_energy_data_item, item_name, status, analys_type, true, status_ok); + node_item->setData(project_name, ProjectName); + QVariantList conform_info { conform_time_win, order }; + node_item->setData(conform_info, ConformInfo); + node_map[item_name] = node_item; + } else { + auto ch_energy_count_item = node_map[item_name]; + this->SetNodeStatus(ch_energy_count_item, status, status_ok); + } + } + if (!conform_energy_data_filename_list.isEmpty()) { + item_name = QStringLiteral(u"符合能谱[%1ns]").arg(conform_time_win); + if (node_map.contains(item_name)) { + auto energy_total_count_spec_item = node_map[item_name]; + this->SetNodeStatus(energy_total_count_spec_item, status, status_ok); + } + item_name = QStringLiteral(u"反符合能谱[%1ns]").arg(conform_time_win); + if (node_map.contains(item_name)) { + auto energy_total_count_spec_item = node_map[item_name]; + this->SetNodeStatus(energy_total_count_spec_item, status, status_ok); + } + item_name = QStringLiteral(u"二维符合能谱[%1ns]").arg(conform_time_win); + if (node_map.contains(item_name)) { + auto energy_total_count_spec_item = node_map[item_name]; + this->SetNodeStatus(energy_total_count_spec_item, status, status_ok); + } + item_name = QStringLiteral(u"三维符合能谱[%1ns]").arg(conform_time_win); + if (node_map.contains(item_name)) { + auto energy_total_count_spec_item = node_map[item_name]; + this->SetNodeStatus(energy_total_count_spec_item, status, status_ok); + } + } + } } } pro_model->SaveProjectModel(); @@ -909,54 +931,57 @@ void MeasureAnalysisProjectModelList::intiProjectNodeStruce(MeasureAnalysisProje // 测量控制 QString item_name = QStringLiteral(u"测量控制"); - QStandardItem* measure_ctrl_item = AddChildNode(project_item, item_name, QString(), QVariant(), true, true); + analys_type = QVariant::fromValue(AnalysisType::None); + QStandardItem* measure_ctrl_item = AddChildNode(project_item, item_name, QString(), analys_type, true, true); measure_ctrl_item->setData(project_name, ProjectName); node_map[item_name] = measure_ctrl_item; const QString& measure_device_params_cfg_filename = pro_model->GetMeasureDeviceParamsCfgFilename(); - bool state_ok = !measure_device_params_cfg_filename.isEmpty(); - status = state_ok ? QStringLiteral(u"已配置") : QStringLiteral(u"未配置"); + bool status_ok = !measure_device_params_cfg_filename.isEmpty(); + status = status_ok ? QStringLiteral(u"已配置") : QStringLiteral(u"未配置"); analys_type = QVariant::fromValue(AnalysisType::DeviceParamsCfg); item_name = QStringLiteral(u"设备配置参数"); - QStandardItem* node_item = AddChildNode(measure_ctrl_item, item_name, status, analys_type, true, state_ok); + QStandardItem* node_item = AddChildNode(measure_ctrl_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_map[item_name] = node_item; - state_ok = !pro_model->GetEnergyScaleFilename().isEmpty(); - status = state_ok ? QStringLiteral(u"已配置") : QStringLiteral(u"未配置"); + status_ok = !pro_model->GetEnergyScaleFilename().isEmpty(); + status = status_ok ? QStringLiteral(u"已配置") : QStringLiteral(u"未配置"); analys_type = QVariant::fromValue(AnalysisType::EnergyScale); item_name = QStringLiteral(u"能量刻度"); - node_item = AddChildNode(measure_ctrl_item, item_name, status, analys_type, true, state_ok); + node_item = AddChildNode(measure_ctrl_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_map[item_name] = node_item; - state_ok = !pro_model->GetEfficiencyScaleFilename().isEmpty(); - status = state_ok ? QStringLiteral(u"已配置") : QStringLiteral(u"未配置"); + status_ok = !pro_model->GetEfficiencyScaleFilename().isEmpty(); + status = status_ok ? QStringLiteral(u"已配置") : QStringLiteral(u"未配置"); analys_type = QVariant::fromValue(AnalysisType::EfficiencyScale); item_name = QStringLiteral(u"效率刻度"); - node_item = AddChildNode(measure_ctrl_item, item_name, status, analys_type, true, state_ok); + node_item = AddChildNode(measure_ctrl_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_map[item_name] = node_item; // 分析数据 item_name = QStringLiteral(u"分析数据"); - QStandardItem* analysis_data_item = AddChildNode(project_item, item_name, QString(), QVariant(), true, true); + analys_type = QVariant::fromValue(AnalysisType::None); + QStandardItem* analysis_data_item = AddChildNode(project_item, item_name, QString(), analys_type, true, true); analysis_data_item->setData(project_name, ProjectName); node_map[item_name] = node_item; - state_ok = !pro_model->GetAllChannelParticleDataFilename().isEmpty(); - status = state_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); + status_ok = !pro_model->GetAllChannelParticleDataFilename().isEmpty(); + status = status_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); analys_type = QVariant::fromValue(AnalysisType::ParticleData); item_name = QStringLiteral(u"测量粒子数据"); - node_item = AddChildNode(analysis_data_item, item_name, status, analys_type, true, state_ok); + node_item = AddChildNode(analysis_data_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_map[item_name] = node_item; const auto& ch_addr_count_data_filename_list = pro_model->GetChannelAddressCountDataFilenameList(); - state_ok = !ch_addr_count_data_filename_list.isEmpty(); - status = state_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); + status_ok = !ch_addr_count_data_filename_list.isEmpty(); + status = status_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); item_name = QStringLiteral(u"道址计数"); - node_item = AddChildNode(analysis_data_item, item_name, status, QVariant(), true, state_ok); + analys_type = QVariant::fromValue(AnalysisType::None); + node_item = AddChildNode(analysis_data_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_map[item_name] = node_item; QStandardItem* adrr_count_item = node_item; @@ -964,48 +989,65 @@ void MeasureAnalysisProjectModelList::intiProjectNodeStruce(MeasureAnalysisProje uint ch_num = it.key(); QString item_name = QStringLiteral(u"通道%1道址计数").arg(ch_num); const QVariant& analys_type = QVariant::fromValue(AnalysisType::AddressCountData); - QStandardItem* node_item = AddChildNode(adrr_count_item, item_name, status, analys_type, true, state_ok); + QStandardItem* node_item = AddChildNode(adrr_count_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_item->setData(ch_num, ChannelNum); node_map[item_name] = node_item; } - state_ok = !pro_model->GetParticleEnergyDataFilename().isEmpty(); - status = state_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); + status_ok = !pro_model->GetParticleEnergyDataFilename().isEmpty(); + status = status_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); analys_type = QVariant::fromValue(AnalysisType::ParticleEnergyData); item_name = QStringLiteral(u"粒子能量数据"); - node_item = AddChildNode(analysis_data_item, item_name, status, analys_type, true, state_ok); + node_item = AddChildNode(analysis_data_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_map[item_name] = node_item; - state_ok = !pro_model->GetAllChannelEnergyTotalCountDataFilename().isEmpty(); - status = state_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); + status_ok = !pro_model->GetAllChannelEnergyTotalCountDataFilename().isEmpty(); + status = status_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); item_name = QStringLiteral(u"能量计数"); analys_type = QVariant::fromValue(AnalysisType::EnergyCountData); - node_item = AddChildNode(analysis_data_item, item_name, status, analys_type, true, state_ok); + node_item = AddChildNode(analysis_data_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_map[item_name] = node_item; QStandardItem* energy_count_item = node_item; const auto& ch_energy_count_data_filename_list = pro_model->GetChannelEnergyCountDataFilenameList(); - state_ok = !ch_energy_count_data_filename_list.isEmpty(); + status_ok = !ch_energy_count_data_filename_list.isEmpty(); for (auto it = ch_energy_count_data_filename_list.begin(); it != ch_energy_count_data_filename_list.end(); ++it) { uint ch_num = it.key(); QString item_name = QStringLiteral(u"通道%1能量计数").arg(ch_num); const QVariant& analys_type = QVariant::fromValue(AnalysisType::ChannelEnergyCountData); - QStandardItem* node_item = AddChildNode(energy_count_item, item_name, status, analys_type, true, state_ok); + QStandardItem* node_item = AddChildNode(energy_count_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_item->setData(ch_num, ChannelNum); node_map[item_name] = node_item; } uint conform_time_win = pro_model->GetConformTimeWin(); - state_ok = !pro_model->GetTimeWinConformEnergyDataFilenameList(conform_time_win).isEmpty(); - status = state_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); - analys_type = QVariant::fromValue(AnalysisType::CoincidenceParticleEnergyData); - item_name = QStringLiteral(u"符合粒子能量数据[%1ns]").arg(conform_time_win); - node_item = AddChildNode(analysis_data_item, item_name, status, analys_type, true, state_ok); - node_item->setData(project_name, ProjectName); - node_map[item_name] = node_item; + status_ok = !pro_model->GetTimeWinConformEnergyDataFilenameList(conform_time_win).isEmpty(); + status = status_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); + item_name = QStringLiteral(u"符合粒子能量数据"); + analys_type = QVariant::fromValue(AnalysisType::None); + QStandardItem* conform_energy_data_group_item = AddChildNode(analysis_data_item, item_name, status, analys_type, true, status_ok); + conform_energy_data_group_item->setData(project_name, ProjectName); + node_map[item_name] = conform_energy_data_group_item; + + auto time_win_file_name_set = pro_model->GetConformParticleEnergyDataFilenameList(); + for (int conform_time_win : time_win_file_name_set.keys()) { + const auto& conform_energy_data_filename_list = pro_model->GetTimeWinConformEnergyDataFilenameList(conform_time_win); + for (auto it = conform_energy_data_filename_list.constBegin(); it!=conform_energy_data_filename_list.constEnd(); ++it) { + int order = it.key(); + status_ok = !it.value().isEmpty(); + status = status_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); + QString item_name = QStringLiteral(u"%1个粒子符合[%2ns]").arg(order).arg(conform_time_win); + const QVariant& analys_type = QVariant::fromValue(AnalysisType::CoincidenceParticleEnergyData); + QStandardItem* node_item = AddChildNode(conform_energy_data_group_item, item_name, status, analys_type, true, status_ok); + node_item->setData(project_name, ProjectName); + QVariantList conform_info { conform_time_win, order }; + node_item->setData(conform_info, ConformInfo); + node_map[item_name] = node_item; + } + } // 交互分析 item_name = QStringLiteral(u"交互分析"); @@ -1013,98 +1055,98 @@ void MeasureAnalysisProjectModelList::intiProjectNodeStruce(MeasureAnalysisProje interactive_analysis_item->setData(project_name, ProjectName); node_map[item_name] = interactive_analysis_item; - state_ok = !pro_model->GetChannelAddressCountDataFilenameList().isEmpty(); - status = state_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); + status_ok = !pro_model->GetChannelAddressCountDataFilenameList().isEmpty(); + status = status_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); analys_type = QVariant::fromValue(AnalysisType::AddressCountSpectrumView); item_name = QStringLiteral(u"道址计数谱"); - node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, state_ok); + node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_map[item_name] = node_item; - state_ok = !pro_model->GetAllChannelEnergyTotalCountDataFilename().isEmpty(); - state_ok &= !pro_model->GetChannelEnergyCountDataFilenameList().isEmpty(); - status = state_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); + status_ok = !pro_model->GetAllChannelEnergyTotalCountDataFilename().isEmpty(); + status_ok &= !pro_model->GetChannelEnergyCountDataFilenameList().isEmpty(); + status = status_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); analys_type = QVariant::fromValue(AnalysisType::EnergyCountSpectrumView); item_name = QStringLiteral(u"能量计数谱"); - node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, state_ok); + node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_map[item_name] = node_item; - state_ok = !pro_model->GetParticleEnergyDataFilename().isEmpty(); - status = state_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); + status_ok = !pro_model->GetParticleEnergyDataFilename().isEmpty(); + status = status_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); analys_type = QVariant::fromValue(AnalysisType::CountingRateView); item_name = QStringLiteral(u"计数率分析"); - node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, state_ok); + node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_map[item_name] = node_item; - state_ok = !pro_model->GetParticleEnergyDataFilename().isEmpty(); - status = state_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); + status_ok = !pro_model->GetParticleEnergyDataFilename().isEmpty(); + status = status_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); analys_type = QVariant::fromValue(AnalysisType::EnergyPeakFitView); item_name = QStringLiteral(u"峰拟合分析"); - node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, state_ok); + node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_map[item_name] = node_item; - state_ok = !pro_model->GetParticleEnergyDataFilename().isEmpty(); - status = state_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); + status_ok = !pro_model->GetParticleEnergyDataFilename().isEmpty(); + status = status_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); analys_type = QVariant::fromValue(AnalysisType::NuclideAnalysisView); item_name = QStringLiteral(u"核素分析"); - node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, state_ok); + node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_map[item_name] = node_item; - state_ok = !pro_model->GetParticleEnergyDataFilename().isEmpty(); - status = state_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); + status_ok = !pro_model->GetParticleEnergyDataFilename().isEmpty(); + status = status_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); analys_type = QVariant::fromValue(AnalysisType::ParticleInTimeView); item_name = QStringLiteral(u"粒子入射时间分析"); - node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, state_ok); + node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_map[item_name] = node_item; - state_ok = !pro_model->GetAllChannelParticleDataFilename().isEmpty(); - status = state_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); + status_ok = !pro_model->GetAllChannelParticleDataFilename().isEmpty(); + status = status_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); analys_type = QVariant::fromValue(AnalysisType::ParticleTimeDiffView); item_name = QStringLiteral(u"粒子时间差分析"); - node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, state_ok); + node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_map[item_name] = node_item; - state_ok = !pro_model->GetTimeWinConformEnergyDataFilenameList(conform_time_win).isEmpty(); - status = state_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); + status_ok = !pro_model->GetTimeWinConformEnergyDataFilenameList(conform_time_win).isEmpty(); + status = status_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); analys_type = QVariant::fromValue(AnalysisType::CoincidenceEventTimeView); item_name = QStringLiteral(u"符合事件时间分析"); - node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, state_ok); + node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_map[item_name] = node_item; - state_ok = !pro_model->GetTimeWinConformEnergyDataFilenameList(conform_time_win).isEmpty(); - status = state_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); + status_ok = !pro_model->GetTimeWinConformEnergyDataFilenameList(conform_time_win).isEmpty(); + status = status_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); analys_type = QVariant::fromValue(AnalysisType::CoincidenceParticleEnergySpectrumView); item_name = QStringLiteral(u"符合能谱[%1ns]").arg(conform_time_win); - node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, state_ok); + node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_map[item_name] = node_item; analys_type = QVariant::fromValue(AnalysisType::AntiCoincidenceSpectrumView); item_name = QStringLiteral(u"反符合能谱[%1ns]").arg(conform_time_win); - node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, state_ok); + node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_map[item_name] = node_item; - state_ok = !pro_model->GetTimeWinConformEnergyDataFilenameList(conform_time_win).isEmpty(); - status = state_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); + status_ok = !pro_model->GetTimeWinConformEnergyDataFilenameList(conform_time_win).isEmpty(); + status = status_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); analys_type = QVariant::fromValue(AnalysisType::CoincidenceParticleEnergySpectrum2DView); item_name = QStringLiteral(u"二维符合能谱[%1ns]").arg(conform_time_win); - node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, state_ok); + node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_map[item_name] = node_item; - state_ok = !pro_model->GetTimeWinConformEnergyDataFilenameList(conform_time_win).isEmpty(); - status = state_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); + status_ok = !pro_model->GetTimeWinConformEnergyDataFilenameList(conform_time_win).isEmpty(); + status = status_ok ? QStringLiteral(u"有效") : QStringLiteral(u"无效"); analys_type = QVariant::fromValue(AnalysisType::CoincidenceParticleEnergySpectrum3DView); item_name = QStringLiteral(u"三维符合能谱[%1ns]").arg(conform_time_win); - node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, state_ok); + node_item = AddChildNode(interactive_analysis_item, item_name, status, analys_type, true, status_ok); node_item->setData(project_name, ProjectName); node_map[item_name] = node_item; diff --git a/src/MeasureAnalysisProjectModel.h b/src/MeasureAnalysisProjectModel.h index 816960e..ad7ad4a 100644 --- a/src/MeasureAnalysisProjectModel.h +++ b/src/MeasureAnalysisProjectModel.h @@ -61,6 +61,7 @@ public: const QString GetParticleEnergyDataFilename() const; const QMap > GetConformParticleDataFilenameList() const; const QMap GetTimeWinConformParticleDataFilenameList(uint time_win) const; + const QMap > GetConformParticleEnergyDataFilenameList() const; const QMap GetTimeWinConformEnergyDataFilenameList(uint time_win) const; const QString GetAnalysisCustomData(AnalysisType analysis_type, const QString& data_item_name); @@ -106,7 +107,8 @@ public: NodeType = Qt::UserRole, Fixed = Qt::UserRole + 1, ProjectName = Qt::UserRole + 2, - ChannelNum = Qt::UserRole + 3 + ChannelNum = Qt::UserRole + 3, + ConformInfo = Qt::UserRole + 4 }; public: diff --git a/src/MeasureAnalysisTreeView.cpp b/src/MeasureAnalysisTreeView.cpp index ca9da6e..48f4dd0 100644 --- a/src/MeasureAnalysisTreeView.cpp +++ b/src/MeasureAnalysisTreeView.cpp @@ -6,6 +6,9 @@ MeasureAnalysisTreeView::MeasureAnalysisTreeView(QWidget* parent) : QTreeView(parent) { + this->setFrameShape(QFrame::NoFrame); + this->setLineWidth(0); + _model = ProjectList::Instance(); this->setModel(_model); @@ -134,6 +137,24 @@ void MeasureAnalysisTreeView::onNodeDoubleClicked(const QModelIndex& index) } } } break; + case AnalysisType::CoincidenceParticleEnergyData: { + QVariant conform_info_v = _model->GetNodeUserData(item, ProjectList::ConformInfo); + if (conform_info_v.isValid()) { + auto conform_info = conform_info_v.toList(); + if (conform_info.size() == 2) { + int conform_time_win = conform_info.at(0).toInt(); + int order = conform_info.at(1).toInt(); + MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name); + if (project_model) { + auto file_name_list = project_model->GetTimeWinConformEnergyDataFilenameList(conform_time_win); + if ( file_name_list.contains(order) ) { + const QString& data_name = QStringLiteral(u"%1个粒子符合能量数据[%2ns]").arg(conform_time_win).arg(order);; + data_files_set[data_name] = QString(file_name_list[order]); + } + } + } + } + } break; case AnalysisType::AddressCountSpectrumView: { MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name); if (project_model) {