新的块

This commit is contained in:
wanglong 2024-09-21 10:28:30 +08:00
parent 29acdf7eea
commit b70e2d238a
6 changed files with 151 additions and 129 deletions

View File

@ -120,6 +120,7 @@ QString CplusToJava::jstring2QString(JNIEnv* env, jstring jstr)
return qstr; return qstr;
} }
std::vector<double> CplusToJava::jobjectArray2vectorD(JNIEnv* env, jobjectArray listValue) std::vector<double> CplusToJava::jobjectArray2vectorD(JNIEnv* env, jobjectArray listValue)
{ {
// 处理数组元素 // 处理数组元素
@ -128,15 +129,15 @@ std::vector<double> CplusToJava::jobjectArray2vectorD(JNIEnv* env, jobjectArray
for (int i = 0; i < arrayLen; i++) { for (int i = 0; i < arrayLen; i++) {
jobject element = env->GetObjectArrayElement(listValue, i); jobject element = env->GetObjectArrayElement(listValue, i);
if (element) if (element)
{ {
jdouble value = env->CallDoubleMethod(element, env->GetMethodID(env->FindClass("java/lang/Double"), "doubleValue", "()D")); jdouble value = env->CallDoubleMethod(element, env->GetMethodID(env->FindClass("java/lang/Double"), "doubleValue", "()D"));
results.push_back(value); results.push_back(value);
} }
else else
{ {
results.push_back(qQNaN()); results.push_back(qQNaN());
} }
} }
return results; return results;

View File

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

View File

@ -224,6 +224,10 @@ bool RadionuclideMessage::AnalyseMessgeBody(QTextStream &content)
{ {
bRet &= Analyse_Certificate_Block(content, line); bRet &= Analyse_Certificate_Block(content, line);
} }
else if ( 0==line.compare(block_flag.at(23)) && bRet)
{
bRet &= Analyse_Gps_Block(content, line);
}
else if ( 0==line.compare(block_flag.at(24)) && bRet) else if ( 0==line.compare(block_flag.at(24)) && bRet)
{ {
bRet &= Analyse_b_self_Attenuation_Block(content, line); bRet &= Analyse_b_self_Attenuation_Block(content, line);
@ -232,10 +236,7 @@ bool RadionuclideMessage::AnalyseMessgeBody(QTextStream &content)
{ {
bRet &= Analyse_b_Efficiency_Block(content, line); bRet &= Analyse_b_Efficiency_Block(content, line);
} }
else if ( 0==line.compare(block_flag.at(23)) && bRet)
{
bRet &= Analyse_Gps_Block(content, line);
}
else else
{ // 数据错误,数据有效 { // 数据错误,数据有效
bIsValid = false; bIsValid = false;

View File

@ -3249,125 +3249,137 @@ JNIEXPORT void JNICALL test_analyseSpectrum(const char* pszPath)
} }
jstring Java_org_jeecg_modules_native_1jni_CalValuesHandler_selfBgAnalyse(JNIEnv *env, jclass, jstring phdFile, jstring json) //jstring Java_org_jeecg_modules_native_1jni_CalValuesHandler_selfBgAnalyse(JNIEnv *env, jclass, jstring phdFile, jstring json)
{ //{
QString phdPath = CplusToJava::jstring2QString(env, phdFile); // QString phdPath = CplusToJava::jstring2QString(env, phdFile);
//phd转换 // //phd转换
PHDFile* phd = new PHDFile; // PHDFile* phd = new PHDFile;
phd->filepath = phdPath; // phd->filepath = phdPath;
if(!AlgFunc::LoadSpectrum(phd)) // if(!AlgFunc::LoadSpectrum(phd))
{ // {
return env->NewStringUTF(""); // printf("load error!\n");
} // return env->NewStringUTF("");
// }
QDateTime collectStart = QDateTime::fromString(phd->collect.collection_start_date + " " + phd->collect.collection_start_time, QString(DATATIME_FORMAT)); // QDateTime collectStart = QDateTime::fromString(phd->collect.collection_start_date + " " + phd->collect.collection_start_time, QString(DATATIME_FORMAT));
QDateTime collectStop = QDateTime::fromString(phd->collect.collection_stop_date + " " + phd->collect.collection_stop_time, QString(DATATIME_FORMAT)); // QDateTime collectStop = QDateTime::fromString(phd->collect.collection_stop_date + " " + phd->collect.collection_stop_time, QString(DATATIME_FORMAT));
QDateTime acqStart = QDateTime::fromString(phd->acq.acquisition_start_date + " " + phd->acq.acquisition_start_time, QString(DATATIME_FORMAT)); // QDateTime acqStart = QDateTime::fromString(phd->acq.acquisition_start_date + " " + phd->acq.acquisition_start_time, QString(DATATIME_FORMAT));
double tc = collectStart.secsTo(collectStop); // 采样时间 // double tc = collectStart.secsTo(collectStop); // 采样时间
double tp = collectStop.secsTo(acqStart); // 衰变时间 // double tp = collectStop.secsTo(acqStart); // 衰变时间
double tr = phd->acq.acquisition_real_time; // 能谱获取实时间 // double tr = phd->acq.acquisition_real_time; // 能谱获取实时间
double tl = phd->acq.acquisition_live_time; // 能谱获取活时间 // double tl = phd->acq.acquisition_live_time; // 能谱获取活时间
// QMap<QString, double> sendOdds; //// QMap<QString, double> sendOdds;
// QMap<QString, double> halfLife; //// QMap<QString, double> halfLife;
// QMap<QString, double> area; //// QMap<QString, double> area;
QString jsonStr = CplusToJava::jstring2QString(env, json); // QString jsonStr = CplusToJava::jstring2QString(env, json);
QJsonDocument doc; // printf("json str:%s\n",jsonStr.toStdString().c_str());
doc = QJsonDocument::fromJson(jsonStr.toUtf8()); // QJsonDocument doc;
QJsonObject inObj = doc.object(); // doc = QJsonDocument::fromJson(jsonStr.toUtf8());
// QJsonObject inObj = doc.object();
// QMap<QString, double> sendOdds = {{"XE-131m",(43.9) / 100.0},{"XE-133m",(45.7) / 100.0},{"XE-133",37 / 100.0},{"XE-135",90 / 100.0}}; //// QMap<QString, double> sendOdds = {{"XE-131m",(43.9) / 100.0},{"XE-133m",(45.7) / 100.0},{"XE-133",37 / 100.0},{"XE-135",90 / 100.0}};
// QMap<QString, double> halfLife = {{"XE-131m",11.93400 * (24 * 60 * 60)},{"XE-133m",2.190000 * (24 * 60 * 60)},{"XE-133",5.243000 * (24 * 60 * 60)},{"XE-135",0.380832 * (24 * 60 * 60)}}; //// QMap<QString, double> halfLife = {{"XE-131m",11.93400 * (24 * 60 * 60)},{"XE-133m",2.190000 * (24 * 60 * 60)},{"XE-133",5.243000 * (24 * 60 * 60)},{"XE-135",0.380832 * (24 * 60 * 60)}};
//// QMap<QString, double> halfLife = {{"XE-131m",11.93400},{"XE-133m",2.190000 },{"XE-133",5.243000 },{"XE-135",0.380832 }}; ////// QMap<QString, double> halfLife = {{"XE-131m",11.93400},{"XE-133m",2.190000 },{"XE-133",5.243000 },{"XE-135",0.380832 }};
// QMap<QString, double> area = {{"XE-131m",579},{"XE-133m",925},{"XE-133",2361},{"XE-135",363}}; //// QMap<QString, double> area = {{"XE-131m",579},{"XE-133m",925},{"XE-133",2361},{"XE-135",363}};
QJsonArray data; // QJsonArray data;
for(int i = 0; i < phd->bSelfAttenuation.devNames.size(); i++) // for(int i = 0; i < phd->bSelfAttenuation.devNames.size(); i++)
{ // {
QString name = phd->bSelfAttenuation.devNames[i]; // QString name = phd->bSelfAttenuation.devNames[i];
std::array<double, 3> self = phd->bSelfAttenuation.xenon[i]; // std::array<double, 3> self = phd->bSelfAttenuation.xenon[i];
std::array<double, 3> self2 = phd->bSelfAttenuation.nitrogen[i]; // std::array<double, 3> self2 = phd->bSelfAttenuation.nitrogen[i];
double vxe, vn2; // double vxe, vn2;
vxe = phd->process.sample_volume_of_Xe; // vxe = phd->process.sample_volume_of_Xe;
vn2 = phd->process.Xe_collection_yield; // vn2 = phd->process.Xe_collection_yield;
QJsonObject factorObj = inObj[name].toObject(); // QJsonObject factorObj = inObj[name].toObject();
double halfLife = factorObj["halflife"].toString().toDouble() * (24 * 60 * 60); // double halfLife = factorObj["halflife"].toString().toDouble() * (24 * 60 * 60);
double sendOdds = factorObj["yield"].toString().toDouble() / 100.0; // double sendOdds = factorObj["yield"].toString().toDouble() / 100.0;
double area = factorObj["area"].toString().toDouble(); // double area = factorObj["area"].toString().toDouble();
// printf("halfLife:%f\n",halfLife);
// printf("sendOdds:%f\n",sendOdds);
// printf("area:%f\n",area);
double bgeff, geff;
double f; // double bgeff, geff;
double fxe = self[0] - self[1] * vxe + self[2] * pow(10, -5) * pow(vxe,2); // double f;
double fn2 = self2[0] - self2[0] * vn2 + self2[2] * pow(10, -4) * pow(vn2, 2); // double fxe = self[0] - self[1] * vxe + self[2] * pow(10, -5) * pow(vxe,2);
f = fxe * fn2; // double fn2 = self2[0] - self2[0] * vn2 + self2[2] * pow(10, -4) * pow(vn2, 2);
// if(phd->bSelfAttenuation.devNames[i].compare("XE-133") == 0) // f = fxe * fn2;
//// if(phd->bSelfAttenuation.devNames[i].compare("XE-133") == 0)
//// {
//// double fxe133 = self[0] - self[1] * vxe + self[2] * pow(10, -5) * pow(vxe,2);
//// double fn2133 = self2[0] - self2[0] * vn2 + self2[2] * pow(10, -4) * pow(vn2, 2);
//// f = fxe133 * fn2133;
//// }
//// else if(phd->bSelfAttenuation.devNames[i].compare("XE-135") == 0)
//// {
//// double fxe135 = self[0] - self[1] * vxe + self[2] * pow(10, -5) * pow(vxe,2);
//// double fn2135 = self2[0] - self2[0] * vn2 + self2[2] * pow(10, -4) * pow(vn2, 2);
//// f = fxe135 * fn2135;
//// }
//// else if(phd->bSelfAttenuation.devNames[i].compare("XE-133m") == 0)
//// {
//// f = 1;
//// }
//// else if(phd->bSelfAttenuation.devNames[i].compare("XE-131m") == 0)
//// {
//// f = 1;
//// }
// for(int i2 = 0; i2 < phd->nMapbgEffiKD[CalPHD].nuclide_name.size(); i2++)
// { // {
// double fxe133 = self[0] - self[1] * vxe + self[2] * pow(10, -5) * pow(vxe,2); // if(phd->nMapbgEffiKD[CalPHD].nuclide_name[i2].compare(name) == 0)
// double fn2133 = self2[0] - self2[0] * vn2 + self2[2] * pow(10, -4) * pow(vn2, 2); // {
// f = fxe133 * fn2133; // bgeff = phd->nMapbgEffiKD[CalPHD].bg_efficiency[i2];
// break;
// } // }
// else if(phd->bSelfAttenuation.devNames[i].compare("XE-135") == 0)
// {
// double fxe135 = self[0] - self[1] * vxe + self[2] * pow(10, -5) * pow(vxe,2);
// double fn2135 = self2[0] - self2[0] * vn2 + self2[2] * pow(10, -4) * pow(vn2, 2);
// f = fxe135 * fn2135;
// }
// else if(phd->bSelfAttenuation.devNames[i].compare("XE-133m") == 0)
// {
// f = 1;
// }
// else if(phd->bSelfAttenuation.devNames[i].compare("XE-131m") == 0)
// {
// f = 1;
// } // }
for(int i2 = 0; i2 < phd->nMapbgEffiKD[CalPHD].nuclide_name.size(); i2++) // for(int i2 = 0; i2 < phd->nMapEffiKD[CalPHD].dev_name.size(); i2++)
{ // {
if(phd->nMapbgEffiKD[CalPHD].nuclide_name[i2].compare(name) == 0) // if(phd->nMapEffiKD[CalPHD].dev_name[i2].compare(name) == 0)
{ // {
bgeff = phd->nMapbgEffiKD[CalPHD].bg_efficiency[i2]; // geff = phd->nMapEffiKD[CalPHD].efficiency[i2];
break; // break;
} // }
} // }
for(int i2 = 0; i2 < phd->nMapEffiKD[CalPHD].dev_name.size(); i2++) // double e = exp(1.0); // 计算e的值
{ // double ln2 = log(2);
if(phd->nMapEffiKD[CalPHD].dev_name[i2].compare(name) == 0) // double T = (halfLife);
{ // double lambda = ln2 / T;
geff = phd->nMapEffiKD[CalPHD].efficiency[i2]; // double kc = lambda * tr / (1 - pow(e, -(lambda * tr)));
break; // double a_up = (area / f);
} // double a_low = (tl * bgeff * geff * sendOdds);
} // double a = (a_up / a_low) * kc;
// double ac_mi = lambda * tp;
// double ac_e = pow(e, ac_mi);
// double ac_kc = (lambda * tc) / (1 - pow(e, -(lambda * tc)));
double e = exp(1.0); // 计算e的值 // double ac = (1000 * a / (vxe / 0.087)) * ac_e * ac_kc;
double ln2 = log(2); // qDebug() << "ac : " << ac;
double T = (halfLife); // double cBaseLine = factorObj["baseline"].toString().toDouble();
double lambda = ln2 / T; // double ld = 2.71 + 4.65 * sqrt(cBaseLine);
double kc = lambda * tr / (1 - pow(e, -(lambda * tr))); // double mda = (ld / a_low) * kc;
double a_up = (area / f); // double mdc = (1000 * mda / (vxe / 0.087)) * ac_e * ac_kc;
double a_low = (tl * bgeff * geff * sendOdds);
double a = (a_up / a_low) * kc;
double ac_mi = lambda * tp;
double ac_e = pow(e, ac_mi);
double ac_kc = (lambda * tc) / (1 - pow(e, -(lambda * tc)));
double ac = (1000 * a / (vxe / 0.087)) * ac_e * ac_kc; // QJsonObject obj;
qDebug() << "ac : " << ac; // obj["name"] = name;
// obj["conc"] = ac;
// obj["mda"] = mda;
// obj["mdc"] = mdc;
// data.push_back(obj);
// }
QJsonObject obj; // QJsonDocument document;
obj["name"] = name; // document.setArray(data);
obj["ac"] = ac; // QByteArray simpbyte_array = document.toJson(QJsonDocument::Compact);
data.push_back(obj); // QString simpjson_str(simpbyte_array);
} // printf("result : %s\n", simpjson_str.toStdString().c_str());
// jstring jresult = env->NewStringUTF(simpjson_str.toStdString().c_str());
QJsonDocument document; // return jresult;
document.setArray(data); //}
QByteArray simpbyte_array = document.toJson(QJsonDocument::Compact);
QString simpjson_str(simpbyte_array);
jstring jresult = env->NewStringUTF(simpjson_str.toStdString().c_str());
return jresult;
}

View File

@ -158,13 +158,13 @@ JNIEXPORT jstring JNICALL Java_org_jeecg_modules_native_1jni_CalValuesHandler_an
JNIEXPORT jstring JNICALL Java_org_jeecg_modules_native_1jni_CalValuesHandler_fitPeakFull JNIEXPORT jstring JNICALL Java_org_jeecg_modules_native_1jni_CalValuesHandler_fitPeakFull
(JNIEnv *, jclass, jstring, jobject, jobject, jobject); (JNIEnv *, jclass, jstring, jobject, jobject, jobject);
/* ///*
* Class: org_jeecg_modules_native_jni_CalValuesHandler // * Class: org_jeecg_modules_native_jni_CalValuesHandler
* Method: selfBgAnalyse // * Method: selfBgAnalyse
* Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; // * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
*/ // */
JNIEXPORT jstring JNICALL Java_org_jeecg_modules_native_1jni_CalValuesHandler_selfBgAnalyse //JNIEXPORT jstring JNICALL Java_org_jeecg_modules_native_1jni_CalValuesHandler_selfBgAnalyse
(JNIEnv *, jclass, jstring, jstring); //(JNIEnv *, jclass, jstring, jstring);
JNIEXPORT void JNICALL test_analyseSpectrum(const char* pszPath); JNIEXPORT void JNICALL test_analyseSpectrum(const char* pszPath);

8
selfBgAnalyse.json Normal file
View File

@ -0,0 +1,8 @@
{
"XE-133":{
"halflife":"11.12",
"yield":"2.1",
"area":"243",
"baseline":"1.0"
}
}