添加错误提示

This commit is contained in:
wanglong 2024-12-12 16:23:32 +08:00
parent b70e2d238a
commit 22113ad870
4 changed files with 19 additions and 45 deletions

View File

@ -1990,18 +1990,17 @@ bool GammaAnalyALG::Process(bool bUpdate, QChar dataType, vec certEne)
qDebug() << "The counts of spectrum are all zero!";
return false;
}
callGammaProcess(0);
stdvec vy;
vy = getBaseInfo(s_YControl);
/* **********************************刻度更新*********************************************** */
if(bUpdate)
{
calUpdate(dataType, certEne, true, true, true);
callGammaProcess(1);
}
vy = getBaseInfo(s_YControl);
/* **********************************寻峰*********************************************** */
PeakSearch();
@ -2022,7 +2021,6 @@ bool GammaAnalyALG::Process(bool bUpdate, QChar dataType, vec certEne)
fitPeakFull(idx, ep, ep, ep);
vy = getBaseInfo(s_YControl);
callGammaProcess(4);
baseInfo(s_Energy) = calValues(Cal_Energy, RangeVec2(1, m_nChans));
baseInfo(s_FwhmcAll) = GetFwhmcAll();
baseInfo(s_Lc) = calculateLC(baseInfo(s_BaseLine), baseInfo(s_FwhmcAll), specSetup.RiskLevelK);
@ -2034,7 +2032,6 @@ bool GammaAnalyALG::Process(bool bUpdate, QChar dataType, vec certEne)
////("____na_cy.txt", baseInfo(s_YControl));
////("____na_cdy.txt", baseInfo(s_YSlope));
////("____na_steps.txt", baseInfo(s_Steps));*/
return true;
}
@ -2077,6 +2074,7 @@ bool GammaAnalyALG::AnalyseSpectrum(PHDFile *phd, QMap<QString, NuclideLines> ma
QStringList names;
names << phd->newEner << phd->newReso;
bool bUpdate = false;
if(phd->bAnalyed)
{
SetCalPara(names, phd->mapEnerPara[ names[0] ], phd->mapResoPara[ names[1] ], phd->mapEffiPara[phd->newEffi], phd->mapTotEPara[phd->newTotE]);
@ -2458,10 +2456,8 @@ void GammaAnalyALG::SetCalData(QStringList names, G_EnergyBlock EnerKD, G_Resolu
qDebug() << "The parameter names must has at least 2 element in GammaAnalyALG::SetCalData.";
return;
}
m_curEner = names[0];
m_curReso = names[1];
if(EnerKD.record_count > 0)
{
mat calDatas(EnerKD.record_count, 3);
@ -2509,7 +2505,6 @@ void GammaAnalyALG::SetCalData(QStringList names, G_EnergyBlock EnerKD, G_Resolu
Acal_tot_efficiency_para = FitCalPara(Cal_Tot_efficiency, Cal_Tot_Effi_Data);
//Acal_tot_efficiency_para.print("Acal_tot_efficiency_para = ");
}
/*QString name;
setCalibrationData(name, Cal_Energy, "PHD", tmpEner);
setCalibrationData(name, Cal_Resolution, "PHD", QVec2ToMat(ResoKD));
@ -3352,7 +3347,6 @@ void GammaAnalyALG::patBaseVar(colvec &sqi, colvec &uqi, uvec idx, int updr)
double k = specSetup.k_back;
double k_alpha = specSetup.k_alpha;
double k_beta = specSetup.k_beta;
// get baseline and peak parameters
field<rowvec> t_f1;
if(updr)
@ -3367,6 +3361,7 @@ void GammaAnalyALG::patBaseVar(colvec &sqi, colvec &uqi, uvec idx, int updr)
}
else {
t_f1 = dmspec(QStringList("BaseLine")); //BL = dmspec(sn, 'BaseLine');
/* -------------------------------打印输出 ---------------------------------- */
//("patBaseVar_BaseLine.txt", t_f1(0));
}
@ -3375,7 +3370,6 @@ void GammaAnalyALG::patBaseVar(colvec &sqi, colvec &uqi, uvec idx, int updr)
QStringList dmpsItems;
dmpsItems << "Centroid" << "FWHM_Ch" << "NetArea" << "SigmaCh";
field<vec> t_f2 = dmps(dmpsItems);
/* // modify all peaks, if idx is string
if isstr(idx)
idx = [1 : length(Ct)];
@ -3385,7 +3379,6 @@ void GammaAnalyALG::patBaseVar(colvec &sqi, colvec &uqi, uvec idx, int updr)
{
idx = vectorise( RangeVec(0, t_f2(0).size()-1) );
}
vec MBC, LC, LD, BC;
if(t_f1(0).is_empty()) //if isempty(BL)
{
@ -3404,17 +3397,14 @@ void GammaAnalyALG::patBaseVar(colvec &sqi, colvec &uqi, uvec idx, int updr)
t_f2(1) = t_f2(1)(idx); //Fc = Fc(idx);
t_f2(2) = t_f2(2)(idx); //NA = NA(idx);
t_f2(3) = t_f2(3)(idx); //Sc = Sc(idx);
vec W = 2 * k * t_f2(1); //W = 2 * k * Fc;
/* -------------------------------打印输出 ---------------------------------- */
// total background counts from Ct +- k*Fc
rowvec tmp1 = max(0, t_f1(0));
BC = Independ::abkcnt( tmp1, t_f2(0), t_f2(1), k); //BC = abkcnt(max(BL, 0), Ct, Fc, k);
/* -------------------------------打印输出 ---------------------------------- */
// Mean Back Counts
MBC = BC / W;
/* -------------------------------打印输出 ---------------------------------- */
@ -3433,7 +3423,6 @@ void GammaAnalyALG::patBaseVar(colvec &sqi, colvec &uqi, uvec idx, int updr)
vec DA = c*f*sqrt(t_f2(3) % MBC); //DA = c*f*sqrt(Sc .* MBC);
/* -------------------------------打印输出 ---------------------------------- */
//("patBaseVar_DA.txt", DA);
// Currie's LC
LC = k_alpha * DA;
@ -3444,7 +3433,6 @@ void GammaAnalyALG::patBaseVar(colvec &sqi, colvec &uqi, uvec idx, int updr)
LD = LC + (kb2/2) * ( 1 + sqrt(1 + (4/kb2)*( LC+pow(DA,2) ) ) );
/* -------------------------------打印输出 ---------------------------------- */
//("patBaseVar_LD.txt", LD);
if(updr)
{
// total counts
@ -5596,7 +5584,6 @@ void GammaAnalyALG::calUpdate(QChar dataType, vec certEne, bool E1, bool R, bool
// if true, peaks found in peak search will be kept
//write_peaks_to_pat = getSpecSetup(sn, 'KeepCalPeakSearchPeaks');
bool write_peaks_to_pat = specSetup.KeepCalPeakSearchPeaks;
// for calibration spectra, use energies from certificate instead of setup file
//[dataType, certEne] = dminfo(sn, 'DataType', 'CertificateGEnergies');
vec ELibEne, ELibRes;
@ -5648,7 +5635,6 @@ void GammaAnalyALG::calUpdate(QChar dataType, vec certEne, bool E1, bool R, bool
return;
}
}
////("calUpdate_ELibEne.txt", ELibEne);
////("calUpdate_ELibRes.txt", ELibRes);
@ -5659,7 +5645,6 @@ void GammaAnalyALG::calUpdate(QChar dataType, vec certEne, bool E1, bool R, bool
uvec ene1PIdx = calPeakSearch(ELibEne1, ELibEne);
calEnergyUpdate1(ene1PIdx, ELibEne1);
}
if(R)
{
// update resolution calibration
@ -5667,7 +5652,6 @@ void GammaAnalyALG::calUpdate(QChar dataType, vec certEne, bool E1, bool R, bool
uvec resPIdx = calPeakSearch(ELibRes1, ELibRes);
calResUpdate(resPIdx);
}
if(E2)
{
// second energy calibration update
@ -5675,7 +5659,6 @@ void GammaAnalyALG::calUpdate(QChar dataType, vec certEne, bool E1, bool R, bool
uvec ene2PIdx = calPeakSearch(ELibEne2, ELibEne);
calEnergyUpdate2(ene2PIdx, ELibEne2);
}
// keep changes (quickfit) in PAT, if requested
if(write_peaks_to_pat)
{
@ -5696,7 +5679,6 @@ void GammaAnalyALG::calUpdate(QChar dataType, vec certEne, bool E1, bool R, bool
baseInfo(s_YSlope).clear();
baseInfo(s_AnalysisRange).clear();
}
}
uvec GammaAnalyALG::calPeakSearch(vec &EF, vec ELib)
@ -5920,7 +5902,6 @@ void GammaAnalyALG::calEnergyUpdate2(uvec idx, vec ELib)
{
uword NPeaks = idx.size();
vec C = zeros<vec>(NPeaks);
// fit peaks
vec ret1, ret2, ret3;
uvec tmp;
@ -5936,7 +5917,6 @@ void GammaAnalyALG::calEnergyUpdate2(uvec idx, vec ELib)
C(i) = as_scalar(ret2);
}
//C.print("C = ");
// fit new centroids to library energies
vec p, perr;
s = Independ::calFitPara(p, perr, Cal_Energy, C, ELib);
@ -5952,15 +5932,12 @@ void GammaAnalyALG::calEnergyUpdate2(uvec idx, vec ELib)
{
vec F02 = Independ::calFcnEval(C, Acal_energy_para[m_curEner](0));
double sum02 = sum(pow(F02 - ELib, 2)) / C.size();
vec F2 = Independ::calFcnEval(C, p);
double sum2 = sum(pow(F2 - ELib, 2)) / C.size();
if(sum2 < sum02)
{
m_curEner = CalUpdate2;
Cal_Ener_Data[m_curEner] = data;
field<vec> f_p(2);
f_p(0) = p; f_p(1) = perr;
Acal_energy_para[m_curEner] = f_p;
@ -6131,7 +6108,6 @@ bool GammaAnalyALG::fitPeakQuick(vec &Ao, vec &Co, vec &Fo, double &X2, uvec Af,
end */
bool s = true;
QStringList addArg("");
// get index of leftmost and rightmost peak
//allidx = [Af; Cf; Ff];
uvec allidx = join_vert(Af, Cf);
@ -6145,7 +6121,6 @@ bool GammaAnalyALG::fitPeakQuick(vec &Ao, vec &Co, vec &Fo, double &X2, uvec Af,
X2 = gNaN;
return s;
}
uword LIdx = min(allidx);
uword RIdx = max(allidx);
@ -6153,7 +6128,6 @@ bool GammaAnalyALG::fitPeakQuick(vec &Ao, vec &Co, vec &Fo, double &X2, uvec Af,
uvec Bool = zeros<uvec>(RIdx + 1u);
Bool(allidx) = ones<uvec>(allidx.n_elem);
allidx = find(Bool);
// get peak parameters
//[C, FC, NA] = dmps(sn, 'Centroid', 'FWHM_Ch', 'NetArea');
QStringList Opts; Opts << "Centroid" << "FWHM_Ch" << "NetArea";
@ -6161,7 +6135,6 @@ bool GammaAnalyALG::fitPeakQuick(vec &Ao, vec &Co, vec &Fo, double &X2, uvec Af,
vec C = t_f(0);
vec FC = t_f(1);
vec NA = t_f(2);
// interval for fitting: left centroid - width left FWHM to right centroid + ...
int CL = floor(C(LIdx) - FitWidth * FC(LIdx));
int CR = ceil(C(RIdx) + FitWidth * FC(RIdx));
@ -6170,7 +6143,6 @@ bool GammaAnalyALG::fitPeakQuick(vec &Ao, vec &Co, vec &Fo, double &X2, uvec Af,
rowvec S = baseInfo(s_Spectrum); //S = dmspec(sn, 'Spectrum');
rowvec x = RangeVec2(CL, CR);
rowvec y = S.cols(CL-1, CR-1);
// initial baseline y = k*x + d through extremal points (spectrum data)
double k = (S(CR) - S(CL)) / (CR -CL);
double d = S(CL) - k * CL;
@ -6182,7 +6154,6 @@ bool GammaAnalyALG::fitPeakQuick(vec &Ao, vec &Co, vec &Fo, double &X2, uvec Af,
uvec zeroIdx = find(NA(Af) < minNA);
MatAssign(NA, Af(zeroIdx), minNA);
}
// fit parameters
//[s, BL, Ao, Co, Fo, X2] = fitFunction(x, y, 'peakBaseLin', [k d], [1 2], NA, Af, C, Cf, FC, Ff, addArg{:});
field<vec> para;
@ -6197,7 +6168,6 @@ bool GammaAnalyALG::fitPeakQuick(vec &Ao, vec &Co, vec &Fo, double &X2, uvec Af,
Co = para(2);
Fo = para(3);
}
// write results to temporary PAT
/*patSetPeaks(allidx, 'FittingMethod', 'Q', 'NetArea', Ao(allidx), ...
'Centroid', Co(allidx), 'FWHM_Ch', Fo(allidx), 'NetAreaFree', Af, ...
@ -6213,7 +6183,6 @@ bool GammaAnalyALG::fitPeakQuick(vec &Ao, vec &Co, vec &Fo, double &X2, uvec Af,
patSetPeaks(allidx, items, vals);
vec sqi, uqi;
patBaseVar(sqi, uqi, allidx);
// return only fitted parameters
Ao = Ao(Af);
Co = Co(Cf);

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.9.1, 2024-08-26T16:15:56. -->
<!-- Written by QtCreator 4.9.1, 2024-12-12T15:13:09. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>

View File

@ -1424,7 +1424,6 @@ mat vecsum(rowvec y, vec l, vec h)
// sizes of input vectors
int n = y.size();
int m = l.size();
if(h.size() != m)
{
qDebug() << "summation indizes must be of same size";
@ -1444,7 +1443,6 @@ mat vecsum(rowvec y, vec l, vec h)
// integer and fractional part
vec rl = round(l);
// 0.5 added, since e.g. for integer l, only y(l)/2 accounts to the sum
vec dl = l - rl + 0.5;
@ -1456,7 +1454,6 @@ mat vecsum(rowvec y, vec l, vec h)
vec rh = round(h);
vec dh = rh - h + 0.5;
//uvec bh = AndUMat( AndUMat( rh > 0, rh <= n), dh != 0 );
//bh.print("bh = ");
@ -1466,15 +1463,16 @@ mat vecsum(rowvec y, vec l, vec h)
{
// sum from low to high
//s(i) = sum( y([max(1, rl(i)) : min(n, rh(i))]) );
if(min(n,rh(i)) < 0) throw std::string(" Row::cols(): indices out of bounds or incorrectly used");
s(i) = sum( y.cols( max(1, rl(i))-1, min(n, rh(i))-1 ) );
if(min(n,rh(i)) < 0) throw std::string(" Row::cols(): indices out of bounds or incorrectly used");
if(max(1, rl(i))-1 >= y.n_cols || min(n, rh(i))-1 >= y.n_cols || max(1, rl(i))-1 < 0 || min(n, rh(i))-1 < 0)
throw std::string(" Row::cols(): indices out of bounds or incorrectly used");
s(i) = sum( y.cols( max(1, rl(i))-1, min(n, rh(i))-1 ) );
// fractional part at low border
if( rl(i) > 0 && rl(i) <= n && dl(i) != 0 ) // if( bl(i) )
{
s(i) = s(i) - dl(i) * y(rl(i)-1);
}
// fractional part at high border
if( rh(i) > 0 && rh(i) <= n && dh(i) != 0 ) // if( bh(i) )
{
@ -1482,7 +1480,6 @@ mat vecsum(rowvec y, vec l, vec h)
}
}
}
// size of l
s.reshape( size(l) ); //s = reshape(s, sz);
return s;

View File

@ -1465,13 +1465,13 @@ JNIEXPORT jstring JNICALL Java_org_jeecg_modules_native_1jni_CalValuesHandler_an
}
// **************** printf("maplines get\n");
GammaAnalyALG alg;
try {
alg.setFilePath(xmlFilePath);
alg.setJniBl(env, sendObj, userId);
alg.AnalyseSpectrum(phd, mapLines);
} catch (std::string error) {
}
catch (std::string error) {
QJsonObject errObj;
errObj["analyFlag"] = false;
errObj["analyMessage"] = error.c_str();
@ -1480,8 +1480,16 @@ JNIEXPORT jstring JNICALL Java_org_jeecg_modules_native_1jni_CalValuesHandler_an
QString jsonStr = doc.toJson();
jstring jresult = env->NewStringUTF(jsonStr.toStdString().c_str());
return jresult;
} catch (...) {
QJsonObject errObj;
errObj["analyFlag"] = false;
errObj["analyMessage"] = "update calibration error";
QJsonDocument doc;
doc.setObject(errObj);
QString jsonStr = doc.toJson();
jstring jresult = env->NewStringUTF(jsonStr.toStdString().c_str());
return jresult;
}
// **************** printf("AnalyseSpectrum calc\n");
QJsonObject resultjson;