AnalysisSystemForRadionucli.../DataStore.h

184 lines
6.7 KiB
C
Raw Normal View History

2024-06-04 15:25:02 +08:00
/* 数据存储和处理类
*
*
* 1
* 2
* 3
* 4线
* 5线
* 6
*
*
* 1线
* 2
* 3
*/
#ifndef DATASTORE_H
#define DATASTORE_H
#include <QSqlQuery>
#include "GammaAnalyAlgLib.h"
#include <QDebug>
#include <QFile>
using namespace std;
class AnalyseFlow;
#define SOFT_NAME QLatin1String("armd")
#ifdef Q_OS_UNIX
#define STRING_END QLatin1String("\n")
#else
#define STRING_END QLatin1String("\r\n")
#endif
#define T_NUL_LIB_LOCAL QLatin1String("libdata")
#define T_NUL_LINE_LOCAL QLatin1String("lines")
#define T_RELEVANT_LOCAL QLatin1String("relevant")
#define T_NUL_LIB_REMOTE QLatin1String("CONFIGURATION.GARDS_NUCL_LIB")
#define T_NUL_LINE_REMOTE QLatin1String("CONFIGURATION.GARDS_NUCL_LINES_LIB")
#define T_RELEVANT_REMOTE QLatin1String("CONFIGURATION.GARDS_RELEVANT_NUCLIDE")
#define CHANNEL "channel"
#define ENERGY "energy"
#define ENERGY_CAL QLatin1String("energy")
#define EFFICIENCY_CAL QLatin1String("efficiency")
#define RESOLUTION_CAL QLatin1String("Resolution")
#define TOTALEFFICIENCY_CAL QLatin1String("TotalEfficiency")
enum LineColorIndex{
Color_spec, // [0]:原谱曲线颜色
Color_peak, // [1]:拟合峰曲线颜色
Color_lc, // [2]:LC曲线颜色
Color_base, // [3]:BaseLine
Color_scac, // [4]:SCac曲线颜色
Color_compare, // [5]:比较谱曲线颜色
Color_fitbase, // [6]:拟合基线颜色
Color_Strip, // [7]:两谱和曲线
};
typedef void(*ThrCallBack)();
class DataStore : public QObject
{
Q_OBJECT
public:
~DataStore();
// 调用算法分析谱数据
bool AnalyseData(QString strPath, ThrCallBack callFuc);
/* 判断该谱的分析参数是否改变,返回
* 0 -->
* 1 -->
* -1 --> */
int SettingChanged(PHDFile *phd);
// 加载比较谱数据
bool LoadCompareData(QString filepath);
void SetPHD(PHDFile *phd); // 设置当前谱文件
void SetQuery(const QSqlQuery &query, bool bRemote = false);
// 从数据查询核素识别中所需的核素射线信息
QMap<QString, NuclideLines> GetNuclideLines(const QStringList nuclideList);
// 获取当前谱的核素射线信息
QMap<QString, NuclideLines> GetNuclideLines();
// 由能量求对应道默认从数组下标0开始
int GetChannelByEnergy(double energy, int startIndex = 0);
// 由道求能量,主要用于非整数道
double GetEnergyByFloatChan(double x);
// 返回对应道上的峰序号,若无则返回-1
int FindNearPeak(const vector<PeakInfo> &vPeak, int channel, bool *bFind = 0);
// 根据道channel或能量energy获取重要性因子
double GetSignificance(int channel);
double GetSignificance(double energy);
// 得到主界面中Detailed Information中的数据
QVector<QString> DetailedInfo();
/** *********************************************** 分析结果存储相关函数 **************************************************** **/
// 根据提供的路径path生成IMS2.0格式的谱文件成功返回true失败返回false
bool SavePHD(PHDFile* phd, const QString &path);
// 以 format 指定的格式,保存分析结果到指定路径 path成功返回true失败返回false
bool SaveResultToFile(PHDFile* phd, const QString &path, QString format);
/* 保存分析到数据库
* @param paths LcScacBaselineSpectrum Ftp
* Spectrum paths Spectrum */
bool SaveResultToDB(PHDFile* phd, QStringList &paths);
// 生成IMS2.0格式的谱文件内容
static QString MakeUpSpectrum(PHDFile *phd);
/* 生成基线控制点信息内容,共六个部分:
* 1#AnalyseRange
* 2#XCtrl
* 3#YCtrl
* 4#YSlope
* 5#Baseline
* 6#StepCounts
* # */
static QString BaseCtrlToString(const BaseControls &baseCtrl);
/* 将数组以固定格式组合成字符串
* #type指示的字符串
* */
static QString LcScacToString(const stdvec &vData, QString type);
// 获取谱文件 phd 的交互分析报告内容bLog为false或交互分析日志内容bLog为true
static QString GetReportContent(PHDFile *phd, bool bLog = false);
/** ******************************************************** 曲线点集计算 ******************************************************* **/
/* @return 峰点集的集合,每个峰一个点集
* @param vecPeak
* @param vBase线
* @param color线
* @param start线
* @param end线
* @param bEnergytrueEnergy为横坐标falseChannel为横坐标 */
private:
DataStore();
public:
QSqlQuery m_query; // 用于数据库查询
PHDFile* m_phd; // 当前谱文件指针
bool m_bFromDB; // 是否来自远程数据库
bool m_bRewriteAll; // 写文件时,是否覆盖所有文件
int m_nCount; // 当前谱总道数
int m_nSChan; // 当前谱开始道
double m_dStep; // 峰曲线光滑处理时每隔 m_dStep 道取一个点
stdvec m_vCount; // 当前谱计数
QVector<long> m_vecCompare; // 比较谱计数
QString m_analyst; // 分析员名称
QString m_userId; // 分析员ID
QString m_roleId; // 分析员角色ID
QStringList m_userlib; // 当前谱用户核素库
QStringList m_userlib_P; // P 类型谱用户核素库
QStringList m_userlib_G; // G 类型谱用户核素库
QMap<QString, NuclideLines> m_mapNucLineP; // 存储 P 类型谱用户核素射线能量
QMap<QString, NuclideLines> m_mapNucLineG; // 存储 G 类型谱用户核素射线能量
static DataStore* m_dataStore; // 数据存储和处理类指针
static DataStore *GetDataStore();
};
#endif // DATASTORE_H