EnergySpectrumAnalyer/src/DataProcessWorkPool.h
2026-03-26 10:03:30 +08:00

149 lines
4.4 KiB
C++

#ifndef DATAPROCESSWORKPOOL_H
#define DATAPROCESSWORKPOOL_H
#include <QRunnable>
#include <QString>
#include <QObject>
#include "AnalysisTypeDefine.h"
#include <QMap>
#include <QVariant>
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<QString, QVariant>& 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<QString, QVariant> _data_files_set;
QString _result_dir;
int _step_win_width = 7;
};
class ChannelEnergyScaleFittingTask : public DataProcessTask {
public:
typedef QMap<QString, QMap<int, QList<double> > > FitDataMap;
public:
void SetData(const FitDataMap& channel_energy_scale_fit_data_map, const QMap<QString, int>& 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<QString, int> _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