#ifndef DATAPROCESSWORKPOOL_H #define DATAPROCESSWORKPOOL_H #include #include #include #include "AnalysisTypeDefine.h" #include #include class EnergyScaleDataModel; class MeasureAnalysisProjectModel; namespace DataProcessWorkPool { class DataProcessTask : public QRunnable { public: void SetFinishedNotifier(QObject* finished_notifier, const char* finished_process, const QString& project_name); const QString& GetProjectName() const; const char* GetFinishedNotifierProcess() const; QObject* GetFinishedNotifier() const; virtual bool IsValidSetWorkParameters() const; void StartTask(); virtual void run() override final; protected: void updateTaskResultData(const QVariant& task_result_data); private: virtual bool processTask() = 0; private: QObject* _finished_notifier { nullptr }; const char* _finished_notifier_process { nullptr }; QString _project_name; QVariant _task_result_data; }; class ParticleDataTask : public DataProcessTask { public: void SetAllChannelParticleDataFilename(const QString& all_channel_particle_data_filename); const QString& GetAllChannelParticleDataFilename() const; virtual bool IsValidSetWorkParameters() const override; private: virtual bool processTask() final; virtual bool processEveryChannelParticleData() = 0; private: QString _all_channel_particle_data_filename; }; class EveryChannelParticleCountDataTask : public ParticleDataTask { public: void SetAllChannelCountResultDir(const QString& dir_path); const QString& GetAllChannelCountResultDir() const; void SetEveryChannelCountResultDir(const QString&dir_path); const QString& GetEveryChannelCountResultDir() const; virtual bool IsValidSetWorkParameters() const; private: virtual bool processEveryChannelParticleData() override; private: QString _all_ch_count_dir; QString _every_ch_count_dir; }; class ParticleDataSortTask : public ParticleDataTask { public: void SetSortedResultDir(const QString& sorted_result_dir); const QString& GetSortedResultDir() const; virtual bool IsValidSetWorkParameters() const override; private: virtual bool processEveryChannelParticleData() override; private: QString _sorted_result_dir; }; class ParticleDataSortByMinimysTask : public ParticleDataSortTask { virtual bool processEveryChannelParticleData() override; }; class CoincidenceEventAnalysisTask : public DataProcessTask { private: virtual bool processTask() override; }; class AutoFindPeaksTask : public DataProcessTask { public: void SetAnalysisType(AnalysisType analysis_type); void SetDataFileList(const QMap& data_files_set); void SetResultDir(const QString& result_dir); void SetFindPeakSetpWinWidth(int step_win_width); virtual bool IsValidSetWorkParameters() const override; private: virtual bool processTask() override; private: AnalysisType _analysis_type; QMap _data_files_set; QString _result_dir; int _step_win_width = 7; }; class ChannelEnergyScaleFittingTask : public DataProcessTask { public: typedef QMap > > FitDataMap; public: void SetData(const FitDataMap& channel_energy_scale_fit_data_map, const QMap& fit_degree_map); void SetResultDir(const QString& result_dir); virtual bool IsValidSetWorkParameters() const override; private: virtual bool processTask() override; private: QString _result_dir; FitDataMap _channel_energy_scale_fit_data_map; QMap _fit_degree_map; }; class EnergyScaleParticleDataTask : public DataProcessTask { private: virtual bool processTask() override; }; class EnergyCountProcessTask : public DataProcessTask { private: virtual bool processTask() override; }; class EnergyScaleCoincidenceDataTask : public DataProcessTask { private: virtual bool processTask() override; }; } #endif // DATAPROCESSWORKPOOL_H