AnalysisSystemForRadionucli.../mainwindow.cpp

218 lines
7.6 KiB
C++
Raw Permalink Normal View History

2024-06-04 15:25:02 +08:00
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QColor>
#include <QTime>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_path = qApp->applicationDirPath() + "/Spectrum/";
qDebug() << m_path;
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::Process()
{
QTime time;
time.start();
SpecSetup setup;
PHDFile* phd = new PHDFile();
/* JPP37_001-20151029-002300.PHD.ims
_CMX13_001-20160312_0623_S.PHD
_CNX20_003-20160313_0223_S.PHD
PAP50_001-20151027-090100.PHD.ims
KWP40_001-20151027-200326.PHD.txt */
LoadFile(phd, m_path + "CNX22_001-20110411_2225_Q_FULL_1803.PHD");
//LoadFile(phd, m_path + "PTE09Ref.Sample-006.Rms");
if(phd->header.system_type.contains('G'))
{
setup.ECutAnalysis_Low = 12;
}
GammaAnalyALG alg(setup);
if(phd->header.system_type.contains('P'))
setup.bUpdateCal = true;
alg.SetBaseInfo(phd->Spectrum.counts, phd->Spectrum.begin_channel, phd->Spectrum.num_g_channel);
alg.SetCalData(phd->EnerKD, phd->ResoKD, phd->EffiKD, phd->TotEKD);
alg.Process(phd->msgInfo.data_type.at(0), phd->certificate.g_energy.toStdVector());
/* //获取所有的 pat 信息
stdvec2 out_pat = alg.getPAT();
stdvec Centroid = out_pat.at(i_Centroid);
stdvec NetArea = out_pat[i_NetArea];
//获取 pat 中某项信息
stdvec Centroid2 = alg.getPatInfo(i_Centroid);
stdvec NetArea2 = alg.getPatInfo(i_NetArea);
// 其他能获取的信息参照 GammaAnalyAlgLib.h 文件中 PeakIndex 枚举类
//获取所有的谱基线信息
stdvec2 out_baseInfo = alg.getBaseInfo();
stdvec BaseLine = out_baseInfo.at(s_BaseLine);
stdvec Steps = out_baseInfo[s_Steps];
//获取某项谱基线信息
stdvec BaseLine2 = alg.getBaseInfo(s_BaseLine);
stdvec Steps2 = alg.getBaseInfo(s_Steps);
// 其他能获取的信息参照 GammaAnalyAlgLib.h 文件中 SpecBaseIdx 枚举类 */
/* **********************************刻度拟合*********************************************** */
/*stdvec pEner = alg.calFitPara(Cal_Energy, phd->EnerKD);
stdvec pReso = alg.calFitPara(Cal_Resolution, phd->ResoKD);
stdvec pEffi = alg.calFitPara(Cal_Efficiency, phd->EffiKD);
stdvec pTotE = alg.calFitPara(Cal_Tot_efficiency, phd->TotEKD);*/
/* **********************************刻度更新*********************************************** */
/*if(phd->header.system_type.contains('P'))
{
QChar dataType = phd->msgInfo.data_type.at(0);
alg.calUpdate(dataType, phd->certificate.g_energy.toStdVector(), true, true, true);
}*/
/* **********************************寻峰*********************************************** */
/*alg.PeakSearch(); */
/* **********************************基线优化*********************************************** */
/*alg.baseImprove(setup.BaseImprovePSS); */
/* **********************************净面积拟合*********************************************** */
/*vec t_idx = alg.dmps(QStringList("NetAreaFree"))(0);
uvec idx = arma::find(t_idx), ep;
idx.print("idx = ");
alg.fitPeakFull(idx, ep, ep, ep); */
SetState(IsCalibFitting, IsNull);
SetState(IsPeakSearching, IsCalibFitting);
SetState(IsBaseImproving, IsPeakSearching);
SetState(IsNetAreaFitting, IsBaseImproving);
SetState(IsNull, IsNetAreaFitting);
ui->label_time->setText(QString::number(time.elapsed()));
}
void MainWindow::SetState(AnalyStep doing, AnalyStep done)
{
QString style_doing = "background-color: yellow; font: 13pt \"Arial Rounded MT Bold\";";
QString style_done = "background-color: green; font: 13pt \"Arial Rounded MT Bold\";";
switch(doing)
{
case IsCalibFitting: ui->label_CF->setStyleSheet(style_doing); break;
case IsPeakSearching: ui->label_PS->setStyleSheet(style_doing); break;
case IsBaseImproving: ui->label_BI->setStyleSheet(style_doing); break;
case IsNetAreaFitting: ui->label_NA->setStyleSheet(style_doing); break;
default: break;
}
switch(done)
{
case IsCalibFitting: ui->label_CF->setStyleSheet(style_done); break;
case IsPeakSearching: ui->label_PS->setStyleSheet(style_done); break;
case IsBaseImproving: ui->label_BI->setStyleSheet(style_done); break;
case IsNetAreaFitting: ui->label_NA->setStyleSheet(style_done); break;
default: break;
}
}
void MainWindow::LoadFile(PHDFile* phd, QString filename)
{
RadionuclideMessage sample_data;
sample_data.AnalysePHD_File(filename);
phd->msgInfo = sample_data.GetMessageInfo();
QString block_name = QLatin1String("#Header");
QVariant header = sample_data.GetBlockData(block_name);
if (!header.isNull())
{
phd->header = header.value<HeaderBlock>();
}
block_name = QLatin1String("#Comment");
QVariant comment = sample_data.GetBlockData(block_name);
if(!comment.isNull())
{
phd->totalCmt = comment.value<CommentBlock>();
}
block_name = QLatin1String("#Collection");
QVariant collection = sample_data.GetBlockData(block_name);
if (!collection.isNull())
{
phd->collect = collection.value<CollectionBlock>();
}
block_name = QLatin1String("#Acquisition");
QVariant acquisition = sample_data.GetBlockData(block_name);
if (!acquisition.isNull())
{
phd->acq = acquisition.value<AcquisitionBlock>();
}
block_name = QLatin1String("#Processing");
QVariant process = sample_data.GetBlockData(block_name);
if (!process.isNull())
{
phd->process = process.value<ProcessingBlock>();
}
block_name = QLatin1String("#Calibration");
QVariant calibra = sample_data.GetBlockData(block_name);
if (!calibra.isNull())
{
phd->calibration = calibra.value<CalibrationBlock>();
}
block_name = QLatin1String("");
QVariant certify = sample_data.GetBlockData(block_name);
if(!certify.isNull())
{
phd->certificate = certify.value<CertificateBlock>();
}
block_name = QLatin1String("#g_Spectrum");
phd->Spectrum = sample_data.GetBlockData(block_name).value<G_SpectrumBlock>();
for(int i=0; i<3; i++)
{
phd->EnerKD[i].clear();
phd->ResoKD[i].clear();
phd->EffiKD[i].clear();
phd->TotEKD[i].clear();
}
block_name = QLatin1String("#g_Energy");
G_EnergyBlock Energy = sample_data.GetBlockData(block_name).value<G_EnergyBlock>();
phd->EnerKD[0] = Energy.g_energy.toStdVector();
phd->EnerKD[1] = Energy.centroid_channel.toStdVector();
phd->EnerKD[2] = Energy.uncertainty.toStdVector();
block_name = QLatin1String("#g_Resolution");
G_ResolutionBlock Resolution = sample_data.GetBlockData(block_name).value<G_ResolutionBlock>();
phd->ResoKD[0] = Resolution.g_energy.toStdVector();
phd->ResoKD[1] = Resolution.FWHM.toStdVector();
phd->ResoKD[2] = Resolution.uncertainty.toStdVector();
block_name = QLatin1String("#g_Efficiency");
G_EfficiencyBlock Efficiency = sample_data.GetBlockData(block_name).value<G_EfficiencyBlock>();
phd->EffiKD[0] = Efficiency.g_energy.toStdVector();
phd->EffiKD[1] = Efficiency.efficiency.toStdVector();
phd->EffiKD[2] = Efficiency.uncertainty.toStdVector();
block_name = QLatin1String("#TotalEff");
TotaleffBlock Tot_Eff = sample_data.GetBlockData(block_name).value<TotaleffBlock>();
phd->TotEKD[0] = Tot_Eff.g_energy.toStdVector();
phd->TotEKD[1] = Tot_Eff.total_efficiency.toStdVector();
phd->TotEKD[2] = Tot_Eff.uncertainty.toStdVector();
}
void MainWindow::on_pushButton_clicked()
{
Process();
}