@ -20,6 +20,7 @@
# include "nmDataReservoir.h"
# include "nmDataPvtParaForPebi.h"
# include "nmPebiResultSnapshot.h"
# include "nmDataSensitive.h"
# include "nmAttrRegistry.h"
# include <QCoreApplication>
@ -128,6 +129,33 @@ void appendPvtVectorPara(QStringList& paras,
}
}
void appendSensitivityParas ( nmDataAnalyzeManager * manager , QStringList & paras ,
QMap < QString , QVariant > & values , QMap < QString , QString > & groups )
{
// 与模型结果共用对象分组,排序在 PVT 之后; XML 提供内部“结果参数”层。
if ( ! manager - > getSensitiveData ( ) ) return ;
const QSharedPointer < nmDataSensitive : : BatchResult > batch = manager - > getSensitiveData ( ) - > getResults ( ) ;
if ( batch . isNull ( ) | | batch - > m_calcType ! = nmDataSensitive : : CALC_MONTE_CARLO | |
batch - > m_dFilterThreshold < 0.0 ) return ;
const QStringList names = QStringList ( ) < < " Skin " < < " C " < < " Pi " < < " k " < < " h " < < QString ( QChar ( 0x03c6 ) ) ;
const QStringList resultNames = QStringList ( ) < < " Skin " < < " C " < < " Pi " < < " K " < < " h " < < " phi " ;
const QString groupCode = " RESULT_04_SENSITIVITY " ;
groups [ groupCode ] = QCoreApplication : : translate ( " nmWxParaPropertyPebi " , " Sensitivity results " ) ;
appendResultPara ( paras , values , groupCode , " Sensitivity_RunCount " , double ( batch - > m_runs . size ( ) ) ) ;
appendResultPara ( paras , values , groupCode , " Sensitivity_Threshold " , batch - > m_dFilterThreshold ) ;
for ( int i = 0 ; i < batch - > m_variables . size ( ) ; + + i ) {
const nmDataSensitive : : VariableSampling & variable = batch - > m_variables [ i ] ;
const int index = names . indexOf ( variable . m_varName ) ;
if ( ! variable . m_enabled | | index < 0 ) continue ;
double minimum = 0.0 , maximum = 0.0 ;
if ( ! batch - > filteredParameterBounds ( i , minimum , maximum ) ) continue ;
const QString lower = " Sensitivity_ " + resultNames [ index ] + " _Lower " ;
const QString higher = " Sensitivity_ " + resultNames [ index ] + " _Higher " ;
appendResultPara ( paras , values , groupCode , lower , minimum ) ;
appendResultPara ( paras , values , groupCode , higher , maximum ) ;
}
}
QString resultModelTitlePrefix ( )
{
// 沿用旧结果面板已有的翻译,并统一为“模型-xxx”的标题格式。
@ -648,6 +676,8 @@ void nmWxParaPropertyPebi::rebuildResultParas()
mapObjectNames [ pvtGroupCode ] = resultModelTitlePrefix ( ) + " PVT " ;
}
appendSensitivityParas ( m_pDataManager , listParas , mapValues , mapObjectNames ) ;
// 与左侧面板一致:先按 XML 构建控件并回填实际值,再统一设为只读。
refreshUIs ( listParas , false , mapObjectNames ) ;
restoreOldParas ( mapValues ) ;
@ -658,6 +688,25 @@ void nmWxParaPropertyPebi::rebuildResultParas()
}
}
void nmWxParaPropertyPebi : : refreshSensitivityResults ( )
{
if ( ! m_pDataManager | | ! m_pGridItemUtils ) return ;
QStringList paras ;
QMap < QString , QVariant > values ;
QMap < QString , QString > groups ;
appendSensitivityParas ( m_pDataManager , paras , values , groups ) ;
QStringList previous ;
foreach ( const QString & para , m_listParas ) {
if ( para . startsWith ( " RESULT_04_SENSITIVITY_ " ) ) previous . append ( para ) ;
}
// 首次筛选、空筛选或批次清空导致参数行变化时重建,其余只原位填值。
if ( previous ! = paras ) rebuildResultParas ( ) ;
else {
restoreOldParas ( values ) ;
m_pGridItemUtils - > update ( ) ;
}
}
bool nmWxParaPropertyPebi : : getParaValue ( QString sPara , QVariant & o )
{
if ( nullptr ! = m_pGridItemUtils )