|
|
|
|
@ -1062,8 +1062,7 @@ void nmWxSensitive::updateModelCount()
|
|
|
|
|
const bool monteCarlo = m_sensitiveData.getCalculationType() == nmDataSensitive::CALC_MONTE_CARLO;
|
|
|
|
|
modelCountLabel->setVisible(!monteCarlo);
|
|
|
|
|
m_monteCarloCount->setVisible(monteCarlo);
|
|
|
|
|
generateButton->setEnabled(!monteCarlo && m_pDataManager && !overflow && count > 0 && !m_calculationRunning);
|
|
|
|
|
generateButton->setToolTip(monteCarlo ? tr("Monte-Carlo sampling preview is available; calculation is not yet available.") : QString());
|
|
|
|
|
generateButton->setEnabled(m_pDataManager && !overflow && count > 0 && !m_calculationRunning);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool nmWxSensitive::saveDataFromUI()
|
|
|
|
|
@ -1828,6 +1827,8 @@ void nmWxSensitive::onVariableParamChanged()
|
|
|
|
|
{
|
|
|
|
|
// 数据加载时不响应控件逐项赋值,编辑时只刷新所属参数页。
|
|
|
|
|
if (m_loading) return;
|
|
|
|
|
// 分布设置或次数改变后,生成必须重新抽样,不能使用旧预览。
|
|
|
|
|
m_sensitiveData.clearMonteCarloSamples();
|
|
|
|
|
for (int i = 0; i < m_numSpins.size(); ++i) {
|
|
|
|
|
if (sender() == m_numSpins[i] || sender() == m_minSpins[i] ||
|
|
|
|
|
sender() == m_maxSpins[i] || sender() == m_modeCombos[i] ||
|
|
|
|
|
@ -1857,6 +1858,8 @@ void nmWxSensitive::onTreeItemChanged(QTreeWidgetItem* item, int column)
|
|
|
|
|
{
|
|
|
|
|
Q_UNUSED(column);
|
|
|
|
|
if (m_loading) return;
|
|
|
|
|
// 勾选变量改变会改变整批组合;初始化树状态时保留已有样本。
|
|
|
|
|
if(item) m_sensitiveData.clearMonteCarloSamples();
|
|
|
|
|
// 分组选择与子项选择双向同步,禁用的参数不参与全选和总次数。
|
|
|
|
|
m_loading = true;
|
|
|
|
|
variablesTree->blockSignals(true);
|
|
|
|
|
@ -1884,12 +1887,18 @@ void nmWxSensitive::onTreeItemChanged(QTreeWidgetItem* item, int column)
|
|
|
|
|
|
|
|
|
|
void nmWxSensitive::onGenerateClicked()
|
|
|
|
|
{
|
|
|
|
|
// 本阶段只开放 Monte-Carlo 参数采样与预览,尚不启动数值计算。
|
|
|
|
|
if(calculationTypeCombo->currentIndex() == nmDataSensitive::CALC_MONTE_CARLO) return;
|
|
|
|
|
if(m_calculationRunning || !m_pDataManager || !saveDataFromUI()) return;
|
|
|
|
|
QString error;
|
|
|
|
|
QScopedPointer<nmCalculationDllPebiSolverTask> task;
|
|
|
|
|
try {
|
|
|
|
|
// 优先使用预览的整批样本;未预览或设置改变后才重新采样。
|
|
|
|
|
if(m_sensitiveData.getCalculationType() == nmDataSensitive::CALC_MONTE_CARLO) {
|
|
|
|
|
QVector<double> values;
|
|
|
|
|
if(!m_sensitiveData.getRunValues(0, values) && !m_sensitiveData.resampleMonteCarlo(&error)) {
|
|
|
|
|
QMessageBox::warning(this, tr("Sensitivity"), error);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 从最后成功结果恢复完整输入,当前编辑参数和全局拟压力配置不参与本次分析。
|
|
|
|
|
nmCalculationDllPebiSolverTask source(QString(), m_pDataManager, QString(), nullptr, false, true);
|
|
|
|
|
task.reset(source.createSensitivityBatch(m_sensitiveData, &error));
|
|
|
|
|
@ -1942,6 +1951,7 @@ void nmWxSensitive::setCalculationRunning(bool running)
|
|
|
|
|
calculationTypeCombo->setEnabled(!running);
|
|
|
|
|
variablesTree->setEnabled(!running);
|
|
|
|
|
detailStack->setEnabled(!running);
|
|
|
|
|
m_monteCarloCount->setEnabled(!running);
|
|
|
|
|
previewButton->setEnabled(!running);
|
|
|
|
|
cancelButton->setEnabled(!running);
|
|
|
|
|
if(running) {
|
|
|
|
|
|