#ifndef MEASUREANALYSISPROJECTMODEL_H #define MEASUREANALYSISPROJECTMODEL_H #include #include #include #include #include "AnalysisTypeDefine.h" class MeasureAnalysisView; class MeasureAnalysisProjectModel { public: enum SpectrumType { None, Sample, // 样品谱 Background, // 本底谱 }; public: virtual ~MeasureAnalysisProjectModel(); void SetProjectDir(const QString& project_dir); void SetProjectName(const QString& project_name); void SetSpectrumType(SpectrumType spec_type); void SetIsStdSource(bool is_std_source); void SetDescriptionInfo(const QString& description_info); void SetMeasurePresetTime(ulong measure_preset_time); void SetConformTimeWin(uint conform_time_win); void SetIsMeasureComplete(bool is_measure_complete); void SetMeasureDeviceParamsCfgFilename(const QString& filename); void SetEnergyScaleFilename(const QString& filename); void SetEfficiencyScaleFilename(const QString& filename); void SetAllChannelParticleDataFilename(const QString& filename); void SetChannelAddressCountDataFilename(uint channel, const QString& filename); void SetChannelEnergyCountDataFilename(uint channel, const QString& filename); void SetAllChannelEnergyTotalCountDataFilename(const QString& filename); void SetParticleEnergyDataFilename(const QString& filename); void SetTimeWinConformParticleData(uint time_win, uint conform_particle_count, const QString& filename); void SetTimeWinConformEnergyData(uint time_win, uint conform_particle_count, const QString& filename); void SetAnalysisCustomData(AnalysisType analysis_type, const QString& data_item_name, const QString& data_filename); const QString& GetProjectDir() const; const QString& GetProjectName() const; SpectrumType GetSpectrumType() const; bool GetIsStdSource() const; const QString& GetDescriptionInfo() const; ulong GetMeasurePresetTime() const; uint GetConformTimeWin() const; bool GetIsMeasureComplete() const; const QString& GetMeasureDeviceParamsCfgFilename() const; const QString& GetEnergyScaleFilename() const; const QString& GetEfficiencyScaleFilename() const; const QString& GetAllChannelParticleDataFilename() const; const QMap& GetChannelAddressCountDataFilenameList() const; const QString GetChannelAddressCountDataFilename(uint channel) const; const QMap& GetChannelEnergyCountDataFilenameList() const; const QString GetChannelEnergyCountDataFilename(uint channel) const; const QString& GetAllChannelEnergyTotalCountDataFilename() const; 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); private: QString _project_dir; QString _project_name; SpectrumType _spec_type = SpectrumType::None; bool _is_std_source = false; QString _description_info; ulong _measure_preset_time = 0; uint _conform_time_win = 50; bool _is_measure_complete = false; QString _measure_device_params_cfg_filename; QString _energy_scale_filename; QString _efficiency_scale_filename; QString _all_channel_particle_data_filename; // QMap _channel_particle_data_filename_list; QMap _channel_address_count_data_filename_list; // QString _all_channel_particle_total_count_data_filename; QMap _channel_energy_count_data_filename_list; QString _all_channel_energy_total_count_data_filename; QString _particle_energy_data_filename; QMap > _time_win_conform_particle_data; QMap > _time_win_conform_energy_data; QMap > _analysis_custom_data_set; public: bool LoadProjectModel(const QString& project_filename); bool SaveProjectModel(); private: QString _project_filename; QMutex _save_mutex; }; class MeasureAnalysisProjectModelList : public QStandardItemModel { Q_OBJECT public: enum UserDataType { NodeType = Qt::UserRole, Fixed = Qt::UserRole + 1, ProjectName = Qt::UserRole + 2, ChannelNum = Qt::UserRole + 3, ConformInfo = Qt::UserRole + 4 }; public: static MeasureAnalysisProjectModelList* Instance(); virtual ~MeasureAnalysisProjectModelList(); bool AddProjectModel(MeasureAnalysisProjectModel* model, bool save = true); bool RmProjectModel(const QString& project_name); MeasureAnalysisProjectModel* GetProjectModel(const QString& project_name); MeasureAnalysisProjectModel* GetCurrentProjectModel(); QList GetProjectModels(); void SetCurrentProjectModel(const QString& project_name); public: QStandardItem* GetItemFromIndex(const QModelIndex &index) const; QStandardItem* AddChildNode(QStandardItem *parent_item, const QString &node_name, const QString &status_text = QString(), const QVariant &user_data = QVariant(), bool is_fixed = false, bool state_ok = false); bool RemoveNode(QStandardItem *item); void SetNodeUserData(QStandardItem* item, const QVariant& data); QVariant GetNodeUserData(QStandardItem* item, UserDataType data_type = NodeType) const; void SetNodeStatus(QStandardItem* item, const QString& status, bool state_ok = false); bool GetNodeStatus(QStandardItem* item) const; void ApplyEnergyScale(const QString& project_name); private slots: void onChannelAddressCountProcessFinished(bool ok, const QString& project_name, const QVariant& data); void onEnergyScaleParticleDataFinished(bool ok, const QString& project_name, const QVariant& data); void onEnergyCountProcessFinished(bool ok, const QString& project_name, const QVariant& data); void onCoincidenceProcessFinished(bool ok, const QString& project_name, const QVariant& data); void onEnergyScaleCoincidenceDataFinished(bool ok, const QString& project_name, const QVariant& data); private: void intiProjectNodeStruce(MeasureAnalysisProjectModel *pro_model); private: explicit MeasureAnalysisProjectModelList(QObject *parent = nullptr); static MeasureAnalysisProjectModelList* _s_instance; private: MeasureAnalysisProjectModel* _current_project_model; QMap _project_models; QMap > _project_node_items; }; typedef MeasureAnalysisProjectModelList ProjectList; #endif // MEASUREANALYSISPROJECTMODEL_H