添加获取新的块
This commit is contained in:
		
							parent
							
								
									263ad7c526
								
							
						
					
					
						commit
						f20695daee
					
				|  | @ -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(); | ||||
|  |  | |||
|  | @ -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; | ||||
|     } | ||||
|  |  | |||
|  | @ -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: | ||||
|  |  | |||
|  | @ -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<double> rate;               // 剂量率
 | ||||
|         QVector<double> uncertainty;        // 计量不确定性
 | ||||
|         QVector<QString> date;              // 日期
 | ||||
|         QVector<QString> time;              //时间
 | ||||
|         QVector<long> 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 | ||||
| { | ||||
|  |  | |||
|  | @ -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; | ||||
|  |  | |||
|  | @ -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: | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE QtCreatorProject> | ||||
| <!-- Written by QtCreator 4.9.1, 2024-09-29T15:10:42. --> | ||||
| <!-- Written by QtCreator 4.9.1, 2024-12-12T16:21:19. --> | ||||
| <qtcreator> | ||||
|  <data> | ||||
|   <variable>EnvironmentId</variable> | ||||
|  |  | |||
|  | @ -12,6 +12,7 @@ | |||
| #include <QJsonDocument> | ||||
| #include <QJsonArray> | ||||
| #include <QJsonObject> | ||||
| #include <QTextCodec> | ||||
| 
 | ||||
| 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<RadionuclideData::NBG_EfficiencyBlock>(); | ||||
|         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<RadionuclideData::NBG_EfficiencyBlock>(); | ||||
|         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<RadionuclideData::NBG_EfficiencyBlock>(); | ||||
|         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<RadionuclideData::BSelfAttenuationBlock>(); | ||||
|         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<std::array<double, 3>> data1, QVector<std::array<double, 3>> data2)->QVector<double>{ | ||||
|             QVector<double> 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<double> 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<RadionuclideData::DosHeaderBlock>(); | ||||
|         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<RadionuclideData::DoseRateBlock>(); | ||||
|         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, "<init>", "()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; | ||||
| } | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 wanglong
						wanglong