From f20695daeeb9afc125722ac0e4f5765454555902 Mon Sep 17 00:00:00 2001 From: wanglong <1553009806@qq.com> Date: Thu, 12 Dec 2024 16:22:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96=E6=96=B0?= =?UTF-8?q?=E7=9A=84=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AbstractSpectrumDataMessage.cpp | 3 + AlertMessage.cpp | 3 +- CplusToJava.h | 34 +- DataManager_Define.h | 32 ++ RadionuclideMessage.cpp | 63 ++- RadionuclideMessage.h | 1 + ReadPHDFile.pro.user | 2 +- ...dules_native_jni_EnergySpectrumHandler.cpp | 358 +++++++++++++++++- ...modules_native_jni_EnergySpectrumHandler.h | 10 +- 9 files changed, 482 insertions(+), 24 deletions(-) diff --git a/AbstractSpectrumDataMessage.cpp b/AbstractSpectrumDataMessage.cpp index 5849f16..48406fa 100644 --- a/AbstractSpectrumDataMessage.cpp +++ b/AbstractSpectrumDataMessage.cpp @@ -23,6 +23,8 @@ AbstractSpectrumDataMessage::AbstractSpectrumDataMessage() data_types.append( "ALERT_SYSTEM" ); // [11] data_types.append( "ALERT_TEMP" ); // [12] data_types.append( "ALERT_UPS" ); // [13] + data_types.append( "RMSDOS" ); // [14] + data_types.append( "ALERT_PRESSURE" ); // [15] msg.verify_srid = false; } @@ -86,6 +88,7 @@ bool AbstractSpectrumDataMessage::AnalyseFile(QString file_name) } QTextStream content(&file); + content.setCodec("UTF-8"); if (content.atEnd()) { file.close(); diff --git a/AlertMessage.cpp b/AlertMessage.cpp index 33e522a..87c928a 100644 --- a/AlertMessage.cpp +++ b/AlertMessage.cpp @@ -40,7 +40,8 @@ bool AlertMessage::AnalyseMessgeBody(QTextStream &content) if ( QLatin1String("ALERT_FLOW") != msg.data_type && QLatin1String("ALERT_SYSTEM") != msg.data_type && QLatin1String("ALERT_TEMP") != msg.data_type && - QLatin1String("ALERT_UPS") != msg.data_type ) + QLatin1String("ALERT_UPS") != msg.data_type && + QLatin1String("ALERT_PRESSURE") != msg.data_type) { return bIsValid = false; } diff --git a/CplusToJava.h b/CplusToJava.h index 6f88188..46c90f7 100644 --- a/CplusToJava.h +++ b/CplusToJava.h @@ -94,7 +94,7 @@ typedef struct _Read_Result_ jint b_r_record_count; /* g_Efficiency Block */ - jobjectArray g_e_nuclide; // device name + jobjectArray g_e_nuclide_name; // device name jobjectArray g_e_energy; // -energy (keV) jobjectArray g_e_efficiency; // efficiency (counts in peak/photon emitted) jobjectArray g_e_uncertainty; // uncertainty (counts in peak/photon emitted) @@ -168,6 +168,22 @@ typedef struct _Read_Result_ /*gps block*/ jdouble lon; jdouble lat; + + /* b_Efficiency Block */ + jobjectArray b_e_nuclide_name; // nuclide name + jobjectArray b_e_efficiency; // ROI number + jobjectArray b_e_uncertainty; // - coincidence efficiency (counts in ROI/- pair emitted) + jint b_efficiency_record_count; + + /*b_self_Attenuation block*/ + jobjectArray b_s_a_nuclide_name; + jobjectArray b_s_a_coeff1; + jobjectArray b_s_a_coeff2; + jobjectArray b_s_a_coeff3; + jobjectArray b_s_a_coeff4; + jobjectArray b_s_a_coeff5; + jobjectArray b_s_a_coeff6; + }ReadResult; typedef struct _Generate_Result_ @@ -354,6 +370,22 @@ typedef struct _SOHFile_Result_ jobjectArray detector_response; // detector response }SOHFileResult; +typedef struct _DOS_Result_{ + /* Header Black */ + jstring site_code; // site code + jstring detector_code; // detector code + jstring sample_start_date; + jstring sample_start_time; + + jobjectArray dose_rate; + jobjectArray uncertainty; + jobjectArray dr_start_date; + jobjectArray dr_start_time; + jobjectArray dr_interval_duration; + + jint record_count; +}DOSResult; + class CplusToJava { public: diff --git a/DataManager_Define.h b/DataManager_Define.h index 5843833..4bc3495 100644 --- a/DataManager_Define.h +++ b/DataManager_Define.h @@ -37,6 +37,7 @@ #define ORDER_GPS QLatin1String("#GPS") #define ORDER_BSELF QLatin1String("#b_self_Attenuation") #define ORDER_NB_GEFFICIENCY QLatin1String("#b_Efficiency") +#define DOSERATE QLatin1String("#DoseRate") #define ORDER_STOP QLatin1String("STOP") #define ORDER_BEGIN QLatin1String("BEGIN") #define DATATYPE_QCPHD QLatin1String("QCPHD") @@ -286,6 +287,23 @@ namespace RadionuclideData } HeaderBlock, *PtHeaderBlock; + typedef struct _Dos_Header_Block_ + { + /* Header Black */ + QString site_code; // site code + QString detector_code; // detector code + + QString sample_start_date; + QString sample_start_time; + + QString sample_end_date; + QString sample_end_time; + + QString send_date; + QString send_time; + } + DosHeaderBlock, *PtDosHeaderBlock; + typedef struct _Acquisition_Block_ { /* Acquisition Block */ @@ -519,6 +537,18 @@ namespace RadionuclideData } NBG_EfficiencyBlock, *PtNBG_EfficiencyBlock; + typedef struct _DoseRate_Block_ + { + /* b-gEfficiency Block */ + QVector rate; // 剂量率 + QVector uncertainty; // 计量不确定性 + QVector date; // 日期 + QVector time; //时间 + QVector interval_duration; //与上次间隔时间 + int record_count; + } + DoseRateBlock, *PtDoseRateBlock; + typedef struct _b_self_Attenuation_block_ { /* b_self_Attenuation Block */ @@ -540,6 +570,7 @@ namespace RadionuclideData } Q_DECLARE_METATYPE(RadionuclideData::HeaderBlock) +Q_DECLARE_METATYPE(RadionuclideData::DosHeaderBlock) Q_DECLARE_METATYPE(RadionuclideData::AcquisitionBlock) Q_DECLARE_METATYPE(RadionuclideData::CollectionBlock) Q_DECLARE_METATYPE(RadionuclideData::ProcessingBlock) @@ -562,6 +593,7 @@ Q_DECLARE_METATYPE(RadionuclideData::NBG_EfficiencyBlock) Q_DECLARE_METATYPE(RadionuclideData::BSelfAttenuationBlock) Q_DECLARE_METATYPE(RadionuclideData::n_G_EfficiencyBlock) Q_DECLARE_METATYPE(RadionuclideData::GpsBlock) +Q_DECLARE_METATYPE(RadionuclideData::DoseRateBlock) namespace MetData { diff --git a/RadionuclideMessage.cpp b/RadionuclideMessage.cpp index 392dd90..9ea1884 100644 --- a/RadionuclideMessage.cpp +++ b/RadionuclideMessage.cpp @@ -116,9 +116,10 @@ void RadionuclideMessage::InitBlockFlagInfo() block_flag.append(QLatin1String("STOP")); // [ STOP ] block_flag.append(QLatin1String("BEGIN")); // [ BEGIN ] block_flag.append(QLatin1String("#Spectrum")); // [ 22 ] - block_flag.append(QLatin1String("#GPS")); // [ 23 ] + block_flag.append(QLatin1String("#GPS")); // [ 23 ] block_flag.append(QLatin1String("#b_self_Attenuation")); // [ 24 ] - block_flag.append(QLatin1String("#b_Efficiency")); // [ 25 ] + block_flag.append(QLatin1String("#b_Efficiency")); // [ 25 ] + block_flag.append(QLatin1String("#DoseRate")); // [ 26 ] } bool RadionuclideMessage::AnalyseMessgeBody(QTextStream &content) @@ -131,7 +132,8 @@ bool RadionuclideMessage::AnalyseMessgeBody(QTextStream &content) QLatin1String("BLANKPHD") != msg.data_type && QLatin1String("DETBKPHD") != msg.data_type && QLatin1String("QCPHD") != msg.data_type && - QLatin1String("CALIBPHD") != msg.data_type ) + QLatin1String("CALIBPHD") != msg.data_type && + QLatin1String("RMSDOS") != msg.data_type) { return bIsValid = false; } @@ -235,6 +237,10 @@ bool RadionuclideMessage::AnalyseMessgeBody(QTextStream &content) { bRet &= Analyse_b_Efficiency_Block(content, line); } + else if ( 0==line.compare(block_flag.at(26)) && bRet) + { + bRet &= Analyse_DoseRate_Block(content, line); + } else { // 数据错误,数据有效 bIsValid = false; @@ -264,6 +270,21 @@ bool RadionuclideMessage::AnalyseMessgeBody(QTextStream &content) bool RadionuclideMessage::Analyse_Header_Block(QTextStream& content, QString& nextBlock) { + const MessageInfo& msg = AbstractSpectrumDataMessage::GetMessageInfo(); + if(msg.data_type == QStringLiteral("RMSDOS")) + { + DosHeaderBlock dheader; + content >> dheader.site_code >> dheader.detector_code >> dheader.sample_start_date >> dheader.sample_start_time + >> dheader.sample_end_date >> dheader.sample_end_time >> dheader.send_date >> dheader.send_time; + + radionuclide_msg_data.insert(block_flag.at(0), QVariant::fromValue(dheader)); + + content >> nextBlock; + content.readLine(); //该处的读取行内容操作仅将文件光标移至下一行开头 + + return (content.status()==QTextStream::Ok)?true:false; + + } HeaderBlock Header; QString &line = nextBlock; Header.designator = line.mid(8); @@ -272,7 +293,6 @@ bool RadionuclideMessage::Analyse_Header_Block(QTextStream& content, QString& ne content.readLine(); m_system_type = Header.system_type; - const MessageInfo& msg = AbstractSpectrumDataMessage::GetMessageInfo(); if ( msg.verify_srid ) { bool bRet = Verity_SampleReferenceId( Header.sample_ref_id ); @@ -882,7 +902,6 @@ bool RadionuclideMessage::Analyse_Histogram_Block(QTextStream& content, QString& { Histogram.b_channels = Histogram.counts.count()/row; } - #if 0 long& row_size = Histogram.b_channels; long& column_size = Histogram.g_channels; @@ -1065,6 +1084,40 @@ bool RadionuclideMessage::Analyse_b_Efficiency_Block(QTextStream &content, QStri return (content.status()==QTextStream::Ok)?true:false; } +bool RadionuclideMessage::Analyse_DoseRate_Block(QTextStream &content, QString &nextBlock) +{ + DoseRateBlock dosr; + int row_count = 0; + nextBlock = content.readLine(); + QString temp_line = nextBlock.simplified(); + while (!block_flag.contains(temp_line) && !content.atEnd()) + { + double rate, uncertainty; + QString date, time; + long interval_duration; + QTextStream line_content(&nextBlock); + line_content >> rate >> uncertainty >> date >> time >> interval_duration; + + dosr.rate.push_back(rate); + dosr.uncertainty.push_back(uncertainty); + dosr.date.push_back(date); + dosr.time.push_back(time); + dosr.interval_duration.push_back(interval_duration); + + ++ row_count; + nextBlock = content.readLine(); + temp_line = nextBlock.simplified(); + + if (line_content.status()==QTextStream::ReadCorruptData) + { + return false; + } + } + dosr.record_count = row_count; + radionuclide_msg_data.insert(block_flag.at(26), QVariant::fromValue(dosr)); + return (content.status()==QTextStream::Ok)?true:false; +} + bool RadionuclideMessage::Verity_SampleReferenceId(QString srid) { bool bRet = true; diff --git a/RadionuclideMessage.h b/RadionuclideMessage.h index 0f7f34d..edcfb71 100644 --- a/RadionuclideMessage.h +++ b/RadionuclideMessage.h @@ -48,6 +48,7 @@ private: bool Analyse_Gps_Block(QTextStream& content, QString& nextBlock); bool Analyse_b_self_Attenuation_Block(QTextStream& content, QString& nextBlock); bool Analyse_b_Efficiency_Block(QTextStream& content, QString& nextBlock); + bool Analyse_DoseRate_Block(QTextStream& content, QString& nextBlock); bool Verity_SampleReferenceId(QString srid); private: diff --git a/ReadPHDFile.pro.user b/ReadPHDFile.pro.user index efeb4f7..41e6180 100644 --- a/ReadPHDFile.pro.user +++ b/ReadPHDFile.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/org_jeecg_modules_native_jni_EnergySpectrumHandler.cpp b/org_jeecg_modules_native_jni_EnergySpectrumHandler.cpp index 3c8f9de..dc57560 100644 --- a/org_jeecg_modules_native_jni_EnergySpectrumHandler.cpp +++ b/org_jeecg_modules_native_jni_EnergySpectrumHandler.cpp @@ -12,6 +12,7 @@ #include #include #include +#include JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandler_getSourceData(JNIEnv* env, jclass obj, jstring PHDfile) { @@ -63,6 +64,7 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl bool Histogramflag = true; bool totalflag = true; bool gpsflag = true; + bool b_efficiencyflag = true; QString order; QVariant variant; @@ -308,8 +310,8 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl cresult.g_e_efficiency = CplusToJava::QVectorD2jobjectArray(ngeff.efficiency, env); allSize["g_e_uncertainty"] = ngeff.uncertainty.size(); cresult.g_e_uncertainty = CplusToJava::QVectorD2jobjectArray(ngeff.uncertainty, env); - allSize["g_e_nuclide"] = ngeff.dev_name.size(); - cresult.g_e_nuclide = CplusToJava::QVectorQS2jobjectArray(ngeff.dev_name, env); + allSize["g_e_nuclide_name"] = ngeff.dev_name.size(); + cresult.g_e_nuclide_name = CplusToJava::QVectorQS2jobjectArray(ngeff.dev_name, env); cresult.g_e_record_count = ngeff.record_count; } else { @@ -539,6 +541,30 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl cresult.lon = gps.lon; } + //b_efficiency block内容获取 + order = ORDER_NB_GEFFICIENCY; + variant = message.GetBlockData(order); + if (!variant.isValid()) + { +// printf((order.toStdString() + " get failed\n").c_str()); + b_efficiencyflag = false; + } + else + { + RadionuclideData::NBG_EfficiencyBlock beff = variant.value(); + cresult.b_e_nuclide_name = CplusToJava::QVectorQS2jobjectArray(beff.nuclide_name, env); + allSize["b_e_nuclide_name"] = beff.nuclide_name.size(); + + cresult.b_e_efficiency = CplusToJava::QVectorD2jobjectArray(beff.bg_efficiency, env); + allSize["b_e_efficiency"] = beff.bg_efficiency.size(); +// printf("b eff ciency size : %d\n", beff.bg_efficiency.size()); + + cresult.b_e_uncertainty = CplusToJava::QVectorD2jobjectArray(beff.uncertainty, env); + allSize["b_e_uncertainty"] = beff.uncertainty.size(); +// printf("b eff uncertainty size : %d\n", beff.uncertainty.size()); + cresult.b_efficiency_record_count = beff.record_count; + } + if ((!headerflag) || (!commentflag) || (!sampleflag) || (!certificateflag) || (!acquisitionflag) || (!collectionflag) || (!processflag) || (!calibrationflag) || (!g_energyflag) || (!b_energyflag) || (!g_Resolutionflag) || (!b_Resolutionflag) || (!g_Efficiencyflag) || (!roi_limitsflag) || (!b_gEfficiencyflag) || (!ratiosflag) || (!g_Spectrumflag) || (!b_Spectrumflag) || (!Histogramflag) @@ -811,8 +837,8 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl if (g_Efficiencyflag) { //设置成员变量g_e_name的值 - fieldID = env->GetFieldID(energySpectrumStructClass, "g_e_nuclide", SIG_LIST); - fieldJobject = CplusToJava::Createjobject(env, allSize["g_e_nuclide"], cresult.g_e_nuclide); + fieldID = env->GetFieldID(energySpectrumStructClass, "g_e_nuclide_name", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, allSize["g_e_nuclide_name"], cresult.g_e_nuclide_name); env->SetObjectField(result, fieldID, fieldJobject); //设置成员变量g_e_energy的值 @@ -985,14 +1011,14 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl env->SetLongField(result, fieldID, cresult.g_h_energy_span); //设置成员变量h_counts的值 -// fieldID = env->GetFieldID(energySpectrumStructClass, "h_counts", SIG_LIST); -// fieldJobject = CplusToJava::Createjobject(env, allSize["h_counts"], cresult.h_counts); -// env->SetObjectField(result, fieldID, fieldJobject); - - //设置成员变量h_counts_arr的值 - fieldID = env->GetFieldID(energySpectrumStructClass, "h_count_arr", SIG_LONG_ARRAY); - fieldJobject = CplusToJava::Create2Djobject(env, allSize["g_counts"], cresult.h_counts,cresult.g_channels, cresult.b_channels); + fieldID = env->GetFieldID(energySpectrumStructClass, "h_counts", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, allSize["h_counts"], cresult.h_counts); env->SetObjectField(result, fieldID, fieldJobject); + +// //设置成员变量h_counts_arr的值 +// fieldID = env->GetFieldID(energySpectrumStructClass, "h_count_arr", SIG_LONG_ARRAY); +// fieldJobject = CplusToJava::Create2Djobject(env, allSize["g_counts"], cresult.h_counts,cresult.g_channels, cresult.b_channels); +// env->SetObjectField(result, fieldID, fieldJobject); } if (certificateflag) @@ -1100,6 +1126,24 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl env->SetDoubleField(result, fieldID, cresult.lat); } + if(b_efficiencyflag) + { + //设置成员变量bg_nuclide_name的值 + fieldID = env->GetFieldID(energySpectrumStructClass, "b_e_nuclide_name", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, allSize["b_e_nuclide_name"], cresult.b_e_nuclide_name); + env->SetObjectField(result, fieldID, fieldJobject); + + //设置成员变量bg_nuclide_name的值 + fieldID = env->GetFieldID(energySpectrumStructClass, "b_e_efficiency", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, allSize["b_e_efficiency"], cresult.b_e_efficiency); + env->SetObjectField(result, fieldID, fieldJobject); + + //设置成员变量bg_nuclide_name的值 + fieldID = env->GetFieldID(energySpectrumStructClass, "b_e_uncertainty", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, allSize["b_e_uncertainty"], cresult.b_e_uncertainty); + env->SetObjectField(result, fieldID, fieldJobject); + } + return result; } @@ -1154,6 +1198,8 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl bool Histogramflag = true; bool totalflag = true; bool gpsflag = true; + bool b_efficiencyflag = true; + bool b_self_Attenuation = true; QString order; QVariant variant; @@ -1398,8 +1444,8 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl cresult.g_e_efficiency = CplusToJava::QVectorD2jobjectArray(ngeff.efficiency, env); allSize["g_e_uncertainty"] = ngeff.uncertainty.size(); cresult.g_e_uncertainty = CplusToJava::QVectorD2jobjectArray(ngeff.uncertainty, env); - allSize["g_e_nuclide"] = ngeff.dev_name.size(); - cresult.g_e_nuclide = CplusToJava::QVectorQS2jobjectArray(ngeff.dev_name, env); + allSize["g_e_nuclide_name"] = ngeff.dev_name.size(); + cresult.g_e_nuclide_name = CplusToJava::QVectorQS2jobjectArray(ngeff.dev_name, env); cresult.g_e_record_count = ngeff.record_count; } else { @@ -1629,6 +1675,108 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl cresult.lon = gps.lon; } + //b_efficiency block内容获取 + order = ORDER_NB_GEFFICIENCY; + variant = message.GetBlockData(order); + if (!variant.isValid()) + { +// printf((order.toStdString() + " get failed\n").c_str()); + b_efficiencyflag = false; + } + else + { + RadionuclideData::NBG_EfficiencyBlock beff = variant.value(); + cresult.b_e_nuclide_name = CplusToJava::QVectorQS2jobjectArray(beff.nuclide_name, env); + allSize["b_e_nuclide_name"] = beff.nuclide_name.size(); + + cresult.b_e_efficiency = CplusToJava::QVectorD2jobjectArray(beff.bg_efficiency, env); + allSize["b_e_efficiency"] = beff.bg_efficiency.size(); + + cresult.b_e_uncertainty = CplusToJava::QVectorD2jobjectArray(beff.uncertainty, env); + allSize["b_e_uncertainty"] = beff.uncertainty.size(); + cresult.b_efficiency_record_count = beff.record_count; + } + + //b_efficiency block内容获取 + order = ORDER_NB_GEFFICIENCY; + variant = message.GetBlockData(order); + if (!variant.isValid()) + { +// printf((order.toStdString() + " get failed\n").c_str()); + b_efficiencyflag = false; + } + else + { + RadionuclideData::NBG_EfficiencyBlock beff = variant.value(); + cresult.b_e_nuclide_name = CplusToJava::QVectorQS2jobjectArray(beff.nuclide_name, env); + allSize["b_e_nuclide_name"] = beff.nuclide_name.size(); + + cresult.b_e_efficiency = CplusToJava::QVectorD2jobjectArray(beff.bg_efficiency, env); + allSize["b_e_efficiency"] = beff.bg_efficiency.size(); + + cresult.b_e_uncertainty = CplusToJava::QVectorD2jobjectArray(beff.uncertainty, env); + allSize["b_e_uncertainty"] = beff.uncertainty.size(); + cresult.b_efficiency_record_count = beff.record_count; + } + + RadionuclideData::BSelfAttenuationBlock bsel; + order = ORDER_BSELF; + variant = message.GetBlockData(order); + if (!variant.isValid()) + { + b_self_Attenuation = false; + } + else { + bsel = variant.value(); + cresult.b_s_a_nuclide_name = CplusToJava::QVectorQS2jobjectArray(bsel.devNames, env); + allSize["b_s_a_nuclide_name"] = bsel.devNames.size(); + + int offset = 0; + auto stdarrar2qvector = [&offset](QVector> data1, QVector> data2)->QVector{ + QVector buf1; + for(int i = 0; i < 4; i++) + { + if(offset > 2) + { + buf1.append(data2[i][offset - 3]); + } + else { + buf1.append(data1[i][offset]); + } + } + offset++; + return buf1; + }; + + QVector buf; + + buf = stdarrar2qvector(bsel.xenon,bsel.nitrogen); + cresult.b_s_a_coeff1 = CplusToJava::QVectorD2jobjectArray(buf, env); + allSize["b_s_a_coeff1"] = buf.size(); + + buf = stdarrar2qvector(bsel.xenon,bsel.nitrogen); + cresult.b_s_a_coeff2 = CplusToJava::QVectorD2jobjectArray(buf, env); + allSize["b_s_a_coeff2"] = buf.size(); + + buf = stdarrar2qvector(bsel.xenon,bsel.nitrogen); + cresult.b_s_a_coeff3 = CplusToJava::QVectorD2jobjectArray(buf, env); + allSize["b_s_a_coeff3"] = buf.size(); + + buf = stdarrar2qvector(bsel.xenon,bsel.nitrogen); + cresult.b_s_a_coeff4 = CplusToJava::QVectorD2jobjectArray(buf, env); + allSize["b_s_a_coeff4"] = buf.size(); + + buf = stdarrar2qvector(bsel.xenon,bsel.nitrogen); + cresult.b_s_a_coeff5 = CplusToJava::QVectorD2jobjectArray(buf, env); + allSize["b_s_a_coeff5"] = buf.size(); + + buf = stdarrar2qvector(bsel.xenon,bsel.nitrogen); + cresult.b_s_a_coeff6 = CplusToJava::QVectorD2jobjectArray(buf, env); + allSize["b_s_a_coeff6"] = buf.size(); + + + } + if ((!headerflag) || (!commentflag) || (!sampleflag) || (!certificateflag) || (!acquisitionflag) || (!collectionflag) || (!processflag) || (!calibrationflag) || (!g_energyflag) || (!b_energyflag) || (!g_Resolutionflag) || (!b_Resolutionflag) || (!g_Efficiencyflag) || (!roi_limitsflag) || (!b_gEfficiencyflag) || (!ratiosflag) || (!g_Spectrumflag) || (!b_Spectrumflag) || (!Histogramflag) @@ -1903,8 +2051,8 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl if (g_Efficiencyflag) { //设置成员变量g_e_name的值 - fieldID = env->GetFieldID(energySpectrumStructClass, "g_e_nuclide", SIG_LIST); - fieldJobject = CplusToJava::Createjobject(env, allSize["g_e_nuclide"], cresult.g_e_nuclide); + fieldID = env->GetFieldID(energySpectrumStructClass, "g_e_nuclide_name", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, allSize["g_e_nuclide_name"], cresult.g_e_nuclide_name); env->SetObjectField(result, fieldID, fieldJobject); //设置成员变量g_e_energy的值 @@ -2189,6 +2337,63 @@ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandl fieldID = env->GetFieldID(energySpectrumStructClass, "lat", SIG_DOUBLE); env->SetDoubleField(result, fieldID, cresult.lat); } + + if(b_efficiencyflag) + { + //设置成员变量bg_nuclide_name的值 + fieldID = env->GetFieldID(energySpectrumStructClass, "b_e_nuclide_name", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, allSize["b_e_nuclide_name"], cresult.b_e_nuclide_name); + env->SetObjectField(result, fieldID, fieldJobject); + + //设置成员变量bg_nuclide_name的值 + fieldID = env->GetFieldID(energySpectrumStructClass, "b_e_efficiency", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, allSize["b_e_efficiency"], cresult.b_e_efficiency); + env->SetObjectField(result, fieldID, fieldJobject); + + //设置成员变量bg_nuclide_name的值 + fieldID = env->GetFieldID(energySpectrumStructClass, "b_e_uncertainty", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, allSize["b_e_uncertainty"], cresult.b_e_uncertainty); + env->SetObjectField(result, fieldID, fieldJobject); + } + + if(b_self_Attenuation) + { + //设置成员变量b_s_a_nuclide_name的值 + fieldID = env->GetFieldID(energySpectrumStructClass, "b_s_a_nuclide_name", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, allSize["b_s_a_nuclide_name"], cresult.b_s_a_nuclide_name); + env->SetObjectField(result, fieldID, fieldJobject); + + //设置成员变量b_s_a_coeff1的值 + fieldID = env->GetFieldID(energySpectrumStructClass, "b_s_a_coeff1", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, allSize["b_s_a_coeff1"], cresult.b_s_a_coeff1); + env->SetObjectField(result, fieldID, fieldJobject); + + //设置成员变量b_s_a_coeff2的值 + fieldID = env->GetFieldID(energySpectrumStructClass, "b_s_a_coeff2", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, allSize["b_s_a_coeff2"], cresult.b_s_a_coeff2); + env->SetObjectField(result, fieldID, fieldJobject); + + //设置成员变量b_s_a_coeff3的值 + fieldID = env->GetFieldID(energySpectrumStructClass, "b_s_a_coeff3", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, allSize["b_s_a_coeff3"], cresult.b_s_a_coeff3); + env->SetObjectField(result, fieldID, fieldJobject); + + //设置成员变量b_s_a_coeff4的值 + fieldID = env->GetFieldID(energySpectrumStructClass, "b_s_a_coeff4", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, allSize["b_s_a_coeff4"], cresult.b_s_a_coeff4); + env->SetObjectField(result, fieldID, fieldJobject); + + //设置成员变量b_s_a_coeff5的值 + fieldID = env->GetFieldID(energySpectrumStructClass, "b_s_a_coeff5", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, allSize["b_s_a_coeff5"], cresult.b_s_a_coeff5); + env->SetObjectField(result, fieldID, fieldJobject); + + //设置成员变量b_s_a_coeff1的值 + fieldID = env->GetFieldID(energySpectrumStructClass, "b_s_a_coeff6", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, allSize["b_s_a_coeff6"], cresult.b_s_a_coeff6); + env->SetObjectField(result, fieldID, fieldJobject); + } + return result; } @@ -5057,3 +5262,126 @@ jstring Java_org_jeecg_modules_native_1jni_EnergySpectrumHandler_selfBgAnalyse(J jstring jresult = env->NewStringUTF(simpjson_str.toStdString().c_str()); return jresult; } + +jobject Java_org_jeecg_modules_native_1jni_EnergySpectrumHandler_getDOSSourceData(JNIEnv *env, jclass obj, jstring PHDfile) +{ + //创建结构体对象并填充内容 + DOSResult cresult; + memset(&cresult,0 ,sizeof(cresult)); + + //文件名转换 + QString qfilename = CplusToJava::jstring2QString(env, PHDfile); + printf("phd file %s\n", qfilename.toStdString().c_str()); + + //文件解析 + RadionuclideMessage message; + bool readflag = message.AnalysePHD_File(qfilename); + if (!readflag) + { + // **************** printf("THE PHDfile get failed:"); +// printf(qfilename.toStdString().c_str()); + // **************** printf("\n"); + } + + bool headerflag = true; + bool doseRateflag = true; + + QString order; + QVariant variant; + + //header内容获取 + RadionuclideData::DosHeaderBlock headerBlock; + order = ORDER_HEADER; + variant = message.GetBlockData(order); + if (!variant.isValid()) + { +// printf((order.toStdString() + " get failed\n").c_str()); + headerflag = false; + } + else + { + headerBlock = variant.value(); + cresult.site_code = env->NewStringUTF(headerBlock.site_code.toStdString().c_str()); + cresult.detector_code = env->NewStringUTF(headerBlock.detector_code.toStdString().c_str()); + cresult.sample_start_date = env->NewStringUTF(headerBlock.sample_start_date.toStdString().c_str()); + cresult.sample_start_time = env->NewStringUTF(headerBlock.sample_start_time.toStdString().c_str()); + } + + //DoseRate内容获取 + RadionuclideData::DoseRateBlock doseRateBlock; + order = DOSERATE; + variant = message.GetBlockData(order); + if (!variant.isValid()) + { +// printf((order.toStdString() + " get failed\n").c_str()); + doseRateflag = false; + } + else + { + doseRateBlock = variant.value(); + cresult.dose_rate = CplusToJava::QVectorD2jobjectArray(doseRateBlock.rate, env); + cresult.uncertainty = CplusToJava::QVectorD2jobjectArray(doseRateBlock.uncertainty, env); + cresult.dr_start_date = CplusToJava::QVectorQS2jobjectArray(doseRateBlock.date, env); + cresult.dr_start_time = CplusToJava::QVectorQS2jobjectArray(doseRateBlock.time, env); + cresult.dr_interval_duration = CplusToJava::QVectorL2jobjectArray(doseRateBlock.interval_duration, env); + cresult.record_count = doseRateBlock.record_count; + } + +// if(headerflag && doseRareflag) +// { + +// } + + //获取Java中的EnergySpectrumStruct类 + jclass energySpectrumStructClass = env->FindClass("Lorg/jeecg/modules/native_jni/struct/DOSSpectrumStruct;"); + + // 创建Java中的EnergySpectrumStruct对象 + jmethodID constructorID = env->GetMethodID(energySpectrumStructClass, "", "()V"); + jobject result = env->NewObject(energySpectrumStructClass, constructorID); + + jobject fieldJobject; + jfieldID fieldID; + + if (headerflag) + { + fieldID = env->GetFieldID(energySpectrumStructClass, "station_code", SIG_STRING); + env->SetObjectField(result, fieldID, cresult.site_code); + + fieldID = env->GetFieldID(energySpectrumStructClass, "detector_code", SIG_STRING); + env->SetObjectField(result, fieldID, cresult.detector_code); + + fieldID = env->GetFieldID(energySpectrumStructClass, "start_date", SIG_STRING); + env->SetObjectField(result, fieldID, cresult.sample_start_date); + + fieldID = env->GetFieldID(energySpectrumStructClass, "start_time", SIG_STRING); + env->SetObjectField(result, fieldID, cresult.sample_start_time); + } + + if(doseRateflag) + { + fieldID = env->GetFieldID(energySpectrumStructClass, "dose_rate", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, cresult.record_count, cresult.dose_rate); + env->SetObjectField(result, fieldID, fieldJobject); + + fieldID = env->GetFieldID(energySpectrumStructClass, "uncertainty", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, cresult.record_count, cresult.uncertainty); + env->SetObjectField(result, fieldID, fieldJobject); + + fieldID = env->GetFieldID(energySpectrumStructClass, "dr_start_date", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, cresult.record_count, cresult.dr_start_date); + env->SetObjectField(result, fieldID, fieldJobject); + + fieldID = env->GetFieldID(energySpectrumStructClass, "dr_start_time", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, cresult.record_count, cresult.dr_start_time); + env->SetObjectField(result, fieldID, fieldJobject); + + fieldID = env->GetFieldID(energySpectrumStructClass, "dr_interval_duration", SIG_LIST); + fieldJobject = CplusToJava::Createjobject(env, cresult.record_count, cresult.dr_interval_duration); + env->SetObjectField(result, fieldID, fieldJobject); + + fieldID = env->GetFieldID(energySpectrumStructClass, "dr_record_count", SIG_INT); + env->SetIntField(result, fieldID, cresult.record_count); + } + + return result; +} diff --git a/org_jeecg_modules_native_jni_EnergySpectrumHandler.h b/org_jeecg_modules_native_jni_EnergySpectrumHandler.h index a85dcd8..a5eb044 100644 --- a/org_jeecg_modules_native_jni_EnergySpectrumHandler.h +++ b/org_jeecg_modules_native_jni_EnergySpectrumHandler.h @@ -21,10 +21,18 @@ extern "C" { /* * Class: org_jeecg_modules_native_jni_EnergySpectrumHandler - * Method: getSourceData_test + * Method: getSourceDataNotHis * Signature: (Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandler_getSourceDataNotHis + (JNIEnv* env, jclass obj, jstring PHDfile); + + /* + * Class: org_jeecg_modules_native_jni_EnergySpectrumHandler + * Method: getDOSSourceData + * Signature: (Ljava/lang/String;)Ljava/lang/String; + */ + JNIEXPORT jobject JNICALL Java_org_jeecg_modules_native_1jni_EnergySpectrumHandler_getDOSSourceData (JNIEnv* env, jclass obj, jstring PHDfile); /* * Class: org_jeecg_modules_native_jni_EnergySpectrumHandler