#ifndef NMWXAUTOMATICFITTING_H #define NMWXAUTOMATICFITTING_H #include "iDlgBase.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "nmDataAnalyzeManager.h" #include "nmDataReservoir.h" #include "nmDataWellBase.h" #include "nmDataAutomaticFitting.h" #include "nmCalculationAutoFitPSO.h" #include "nmCalculationAutoFitLM.h" #include "nmWxAutomaticfittingStart.h" #include "nmSubWxs_global.h" class NM_SUB_WXS_EXPORT nmWxAutomaticFitting : public iDlgBase { Q_OBJECT public: nmWxAutomaticFitting(QWidget *parent = 0, nmSensitivityFitSettings* settings = nullptr, const QStringList& sampledParameters = QStringList()); ~nmWxAutomaticFitting(); virtual QSize sizeHint() const; private slots: void onSelectAll(bool checked); void onAccept(); void onReject(); void onAlgorithmChanged(int index); void onParameterTableItemChanged(QTreeWidgetItem* item, int column); // 自动拟合相关槽函数 void runAutoFitting(); void onFittingProgress(int iteration, double fitness); void onFittingFinished(bool success, const QString& message); void onStopFitting(); private: void setupUI(); void setupParameterTable(); void setupControlPanel(); void setupButtons(); void updateSelectAllState(); void setAutomaticFittingValue(); void saveModelParameters(); void initializeModelParameters(bool restoreRanges = true); void addParameter(QTreeWidgetItem* group, int type, nmDataWellBase* well, double initial); QVector primaryInitialValues() const; QStringList selectedParameterLabels(bool units) const; void updateRangeForParameter(int parameterIndex, double centerValue); void setParameterRange(int parameterIndex, double minValue, double maxValue); bool getPhysicalParameterRange(int parameterIndex, double& minValue, double& maxValue); bool validateParameterTable(QString& errorMessage, int parameterIndex = -1); void startAutoFitting(const QVector>& targetData, const QStringList& selectedParams, const QString& targetWellName); void cleanupFitting(); void refreshParametersFromModel(); private: // UI组件 QVBoxLayout* m_mainLayout; QGridLayout* m_controlLayout; QTreeWidget* m_parameterTable; QVector m_parameterItems; // 控制面板组件 QLineEdit* m_iterationEdit; QLabel* m_iterationLabel; QLineEdit* m_errorLimitEdit; QString m_targetWellName; QComboBox* m_algorithmCombo; // 按钮 QCheckBox* m_selectAllCheckBox; QPushButton* m_okBtn; QPushButton* m_cancelBtn; // 数据成员 nmDataReservoir reservoirData; nmDataAutomaticFitting automaticFittingData; nmSensitivityFitSettings* m_sensitivitySettings; QStringList m_sampledParameters; // 自动拟合相关成员 nmCalculationAutoFitPSO* m_autoFitterPSO; nmCalculationAutoFitLM* m_autoFitterLM; QProgressDialog* m_progressDialog; QTimer* m_progressTimer; bool m_updatingParameterRanges; // 拟合开始界面 nmWxAutomaticfittingStart* m_progressMonitor; }; #endif // NMWXAUTOMATICFITTING_H