def __init__(self): SimulationConfigPanel.__init__(self, EnsembleExperiment) layout = QFormLayout() case_selector = CaseSelector() layout.addRow("Current case:", case_selector) run_path_label = QLabel("<b>%s</b>" % getRunPath()) addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) number_of_realizations_label = QLabel("<b>%d</b>" % getRealizationCount()) addHelpToWidget(number_of_realizations_label, "config/ensemble/num_realizations") layout.addRow(QLabel("Number of realizations:"), number_of_realizations_label) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox( self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator( RangeStringArgument(getRealizationCount())) layout.addRow("Active realizations", self._active_realizations_field) self._active_realizations_field.getValidationSupport( ).validationChanged.connect(self.simulationConfigurationChanged) self.setLayout(layout)
def __init__(self): SimulationConfigPanel.__init__(self, EnsembleSmoother( getQueueConfig( ) )) layout = QFormLayout() case_selector = CaseSelector() layout.addRow("Current case:", case_selector) run_path_label = QLabel("<b>%s</b>" % getRunPath()) addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) number_of_realizations_label = QLabel("<b>%d</b>" % getRealizationCount()) addHelpToWidget(number_of_realizations_label, "config/ensemble/num_realizations") layout.addRow(QLabel("Number of realizations:"), number_of_realizations_label) self._target_case_model = TargetCaseModel() self._target_case_field = StringBox(self._target_case_model, "config/simulation/target_case") self._target_case_field.setValidator(ProperNameArgument()) layout.addRow("Target case:", self._target_case_field) self._analysis_module_selector = AnalysisModuleSelector(iterable=False, help_link="config/analysis/analysis_module") layout.addRow("Analysis Module:", self._analysis_module_selector) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox(self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator(RangeStringArgument(getRealizationCount())) layout.addRow("Active realizations", self._active_realizations_field) self._target_case_field.getValidationSupport().validationChanged.connect(self.simulationConfigurationChanged) self._active_realizations_field.getValidationSupport().validationChanged.connect(self.simulationConfigurationChanged) self.setLayout(layout)
def __init__(self): SimulationConfigPanel.__init__(self, IteratedEnsembleSmoother) layout = QFormLayout() case_selector = CaseSelector() layout.addRow("Current case:", case_selector) run_path_label = QLabel("<b>%s</b>" % getRunPath()) addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) number_of_realizations_label = QLabel("<b>%d</b>" % getRealizationCount()) addHelpToWidget(number_of_realizations_label, "config/ensemble/num_realizations") layout.addRow(QLabel("Number of realizations:"), number_of_realizations_label) # The num_iterations_spinner does not track any external changes (will that ever happen?) num_iterations_spinner = QSpinBox() num_iterations_spinner.setMinimum(1) num_iterations_spinner.setMaximum(100) num_iterations_spinner.setValue(getNumberOfIterations()) addHelpToWidget(num_iterations_spinner, "config/simulation/number_of_iterations") num_iterations_spinner.valueChanged[int].connect(setNumberOfIterations) layout.addRow("Number of iterations:", num_iterations_spinner) self._iterated_target_case_format_model = TargetCaseModel( format_mode=True) self._iterated_target_case_format_field = StringBox( self._iterated_target_case_format_model, "config/simulation/iterated_target_case_format", ) self._iterated_target_case_format_field.setValidator( ProperNameFormatArgument()) layout.addRow("Target case format:", self._iterated_target_case_format_field) self._analysis_module_selector = AnalysisModuleSelector( iterable=True, help_link="config/analysis/analysis_module") layout.addRow("Analysis Module:", self._analysis_module_selector) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox( self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator( RangeStringArgument(getRealizationCount())) layout.addRow("Active realizations", self._active_realizations_field) self._iterated_target_case_format_field.getValidationSupport( ).validationChanged.connect(self.simulationConfigurationChanged) self._active_realizations_field.getValidationSupport( ).validationChanged.connect(self.simulationConfigurationChanged) self.setLayout(layout)
def __init__(self): SimulationConfigPanel.__init__(self, MultipleDataAssimilation) layout = QFormLayout() case_selector = CaseSelector() layout.addRow("Current case:", case_selector) run_path_label = QLabel("<b>%s</b>" % getRunPath()) addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) number_of_realizations_label = QLabel("<b>%d</b>" % getRealizationCount()) addHelpToWidget(number_of_realizations_label, "config/ensemble/num_realizations") layout.addRow(QLabel("Number of realizations:"), number_of_realizations_label) self._target_case_format_model = TargetCaseModel(format_mode=True) self._target_case_format_field = StringBox( self._target_case_format_model, "config/simulation/target_case_format") self._target_case_format_field.setValidator(ProperNameFormatArgument()) layout.addRow("Target case format:", self._target_case_format_field) self.weights = MultipleDataAssimilation.default_weights self._createInputForWeights(layout) self._iter_field = StringBox( IterValueModel(), "config/simulation/iter_num", ) self._iter_field.setValidator(IntegerArgument(from_value=0), ) layout.addRow("Start iteration:", self._iter_field) self._analysis_module_selector = AnalysisModuleSelector( iterable=False, help_link="config/analysis/analysis_module") layout.addRow("Analysis Module:", self._analysis_module_selector) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox( self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator( RangeStringArgument(getRealizationCount())) layout.addRow("Active realizations:", self._active_realizations_field) self._target_case_format_field.getValidationSupport( ).validationChanged.connect(self.simulationConfigurationChanged) self._active_realizations_field.getValidationSupport( ).validationChanged.connect(self.simulationConfigurationChanged) self._relative_iteration_weights_box.getValidationSupport( ).validationChanged.connect(self.simulationConfigurationChanged) self.setLayout(layout)
class EnsembleExperimentPanel(SimulationConfigPanel): def __init__(self): SimulationConfigPanel.__init__(self, EnsembleExperiment( getQueueConfig( ) )) layout = QFormLayout() case_selector = CaseSelector() layout.addRow("Current case:", case_selector) run_path_label = QLabel("<b>%s</b>" % getRunPath()) addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) number_of_realizations_label = QLabel("<b>%d</b>" % getRealizationCount()) addHelpToWidget(number_of_realizations_label, "config/ensemble/num_realizations") layout.addRow(QLabel("Number of realizations:"), number_of_realizations_label) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox(self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator(RangeStringArgument(getRealizationCount())) layout.addRow("Active realizations", self._active_realizations_field) self._active_realizations_field.getValidationSupport().validationChanged.connect(self.simulationConfigurationChanged) self.setLayout(layout) def isConfigurationValid(self): return self._active_realizations_field.isValid() def getSimulationArguments(self): active_realizations_mask = self._active_realizations_model.getActiveRealizationsMask() return {"active_realizations": active_realizations_mask}
def __init__(self): QWidget.__init__(self) self.setMinimumWidth(500) self.setMinimumHeight(200) self._dynamic = False self.setWindowTitle("Load results manually") self.activateWindow() layout = QFormLayout() current_case = getCurrentCaseName() run_path_text = QTextEdit() run_path_text.setText(self.readCurrentRunPath()) run_path_text.setDisabled(True) run_path_text.setFixedHeight(80) layout.addRow("Load data from current run path: ", run_path_text) self._case_model = AllCasesModel() self._case_combo = QComboBox() self._case_combo.setSizeAdjustPolicy( QComboBox.AdjustToMinimumContentsLength) self._case_combo.setMinimumContentsLength(20) self._case_combo.setModel(self._case_model) self._case_combo.setCurrentIndex( self._case_model.indexOf(current_case)) layout.addRow("Load into case:", self._case_combo) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox( self._active_realizations_model, "load_results_manually/Realizations") self._active_realizations_field.setValidator(RangeStringArgument()) layout.addRow("Realizations to load:", self._active_realizations_field) iterations_count = LoadResultsModel.getIterationCount() self._iterations_model = ValueModel(iterations_count) self._iterations_field = StringBox(self._iterations_model, "load_results_manually/iterations") self._iterations_field.setValidator(IntegerArgument()) layout.addRow("Iteration to load:", self._iterations_field) self.setLayout(layout)
class EnsembleSmootherPanel(SimulationConfigPanel): def __init__(self): SimulationConfigPanel.__init__(self, EnsembleSmoother( getQueueConfig( ) )) layout = QFormLayout() case_selector = CaseSelector() layout.addRow("Current case:", case_selector) run_path_label = QLabel("<b>%s</b>" % getRunPath()) addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) number_of_realizations_label = QLabel("<b>%d</b>" % getRealizationCount()) addHelpToWidget(number_of_realizations_label, "config/ensemble/num_realizations") layout.addRow(QLabel("Number of realizations:"), number_of_realizations_label) self._target_case_model = TargetCaseModel() self._target_case_field = StringBox(self._target_case_model, "config/simulation/target_case") self._target_case_field.setValidator(ProperNameArgument()) layout.addRow("Target case:", self._target_case_field) self._analysis_module_selector = AnalysisModuleSelector(iterable=False, help_link="config/analysis/analysis_module") layout.addRow("Analysis Module:", self._analysis_module_selector) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox(self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator(RangeStringArgument(getRealizationCount())) layout.addRow("Active realizations", self._active_realizations_field) self._target_case_field.getValidationSupport().validationChanged.connect(self.simulationConfigurationChanged) self._active_realizations_field.getValidationSupport().validationChanged.connect(self.simulationConfigurationChanged) self.setLayout(layout) def isConfigurationValid(self): return self._target_case_field.isValid() and self._active_realizations_field.isValid() def toggleAdvancedOptions(self, show_advanced): self._active_realizations_field.setVisible(show_advanced) self.layout().labelForField(self._active_realizations_field).setVisible(show_advanced) self._analysis_module_selector.setVisible(show_advanced) self.layout().labelForField(self._analysis_module_selector).setVisible(show_advanced) def getSimulationArguments(self): arguments = {"active_realizations": self._active_realizations_model.getActiveRealizationsMask(), "target_case": self._target_case_model.getValue(), "analysis_module": self._analysis_module_selector.getSelectedAnalysisModuleName() } return arguments
def __init__(self, ert: EnKFMain, notifier: ErtNotifier): super().__init__(EnsembleSmoother) self.ert = ert facade = LibresFacade(ert) layout = QFormLayout() self._case_selector = CaseSelector(facade, notifier) layout.addRow("Current case:", self._case_selector) run_path_label = QLabel(f"<b>{facade.run_path}</b>") addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) number_of_realizations_label = QLabel( f"<b>{facade.get_ensemble_size()}</b>") addHelpToWidget(number_of_realizations_label, "config/ensemble/num_realizations") layout.addRow(QLabel("Number of realizations:"), number_of_realizations_label) self._target_case_model = TargetCaseModel(facade, notifier) self._target_case_field = StringBox(self._target_case_model, "config/simulation/target_case") self._target_case_field.setValidator(ProperNameArgument()) layout.addRow("Target case:", self._target_case_field) self._analysis_module_edit = AnalysisModuleEdit( facade, module_name=EnsembleSmootherPanel.analysis_module_name, help_link="config/analysis/analysis_module", ) layout.addRow("Analysis module:", self._analysis_module_edit) active_realizations_model = ActiveRealizationsModel(facade) self._active_realizations_field = StringBox( active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator( RangeStringArgument(facade.get_ensemble_size())) layout.addRow("Active realizations", self._active_realizations_field) self.setLayout(layout) self._target_case_field.getValidationSupport( ).validationChanged.connect(self.simulationConfigurationChanged) self._active_realizations_field.getValidationSupport( ).validationChanged.connect( # noqa self.simulationConfigurationChanged) self._case_selector.currentIndexChanged.connect( self._realizations_from_fs) self._realizations_from_fs() # update with the current case
def __init__(self): SimulationConfigPanel.__init__(self, SingleTestRun) self.setObjectName("Single_test_run_panel") layout = QFormLayout() case_selector = CaseSelector() layout.addRow("Current case:", case_selector) run_path_label = QLabel("<b>%s</b>" % getRunPath()) addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) self._active_realizations_model = ActiveRealizationsModel() self.setLayout(layout)
def __init__(self): queue_config = getQueueConfig() local_queue_config = queue_config.create_local_copy() SimulationConfigPanel.__init__(self, SingleTestRun(local_queue_config)) layout = QFormLayout() case_selector = CaseSelector() layout.addRow("Current case:", case_selector) run_path_label = QLabel("<b>%s</b>" % getRunPath()) addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) self._active_realizations_model = ActiveRealizationsModel() self.setLayout(layout)
def __init__(self, ert: EnKFMain, notifier: ErtNotifier): self.ert = ert self.facade = LibresFacade(ert) super().__init__(EnsembleExperiment) self.setObjectName("Ensemble_experiment_panel") layout = QFormLayout() self._case_selector = CaseSelector(self.facade, notifier) layout.addRow("Current case:", self._case_selector) run_path_label = QLabel(f"<b>{self.facade.run_path}</b>") addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) number_of_realizations_label = QLabel( f"<b>{self.facade.get_ensemble_size()}</b>") addHelpToWidget(number_of_realizations_label, "config/ensemble/num_realizations") layout.addRow(QLabel("Number of realizations:"), number_of_realizations_label) self._active_realizations_field = StringBox( ActiveRealizationsModel(self.facade), "config/simulation/active_realizations", ) self._active_realizations_field.setValidator( RangeStringArgument(self.facade.get_ensemble_size()), ) layout.addRow("Active realizations", self._active_realizations_field) self._iter_field = StringBox( IterValueModel(notifier), "config/simulation/iter_num", ) self._iter_field.setValidator(IntegerArgument(from_value=0), ) layout.addRow("Iteration", self._iter_field) self.setLayout(layout) self._active_realizations_field.getValidationSupport( ).validationChanged.connect( # noqa self.simulationConfigurationChanged) self._case_selector.currentIndexChanged.connect( self._realizations_from_fs) self._realizations_from_fs() # update with the current case
class EnsembleExperimentPanel(SimulationConfigPanel): def __init__(self): SimulationConfigPanel.__init__(self, EnsembleExperiment(getQueueConfig())) layout = QFormLayout() case_selector = CaseSelector() layout.addRow("Current case:", case_selector) run_path_label = QLabel("<b>%s</b>" % getRunPath()) addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) number_of_realizations_label = QLabel("<b>%d</b>" % getRealizationCount()) addHelpToWidget(number_of_realizations_label, "config/ensemble/num_realizations") layout.addRow(QLabel("Number of realizations:"), number_of_realizations_label) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox( self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator( RangeStringArgument(getRealizationCount())) layout.addRow("Active realizations", self._active_realizations_field) self._active_realizations_field.getValidationSupport( ).validationChanged.connect(self.simulationConfigurationChanged) self.setLayout(layout) def isConfigurationValid(self): return self._active_realizations_field.isValid() def toggleAdvancedOptions(self, show_advanced): self._active_realizations_field.setVisible(show_advanced) self.layout().labelForField( self._active_realizations_field).setVisible(show_advanced) def getSimulationArguments(self): active_realizations_mask = self._active_realizations_model.getActiveRealizationsMask( ) return {"active_realizations": active_realizations_mask}
def __init__(self, advanced_option=False): SimulationConfigPanel.__init__(self, IteratedEnsembleSmoother(), advanced_option) layout = QFormLayout() case_selector = CaseSelector() layout.addRow("Current case:", case_selector) run_path_label = QLabel("<b>%s</b>" % getRunPath()) addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) number_of_realizations_label = QLabel("<b>%d</b>" % getRealizationCount()) addHelpToWidget(number_of_realizations_label, "config/ensemble/num_realizations") layout.addRow(QLabel("Number of realizations:"), number_of_realizations_label) # The num_iterations_spinner does not track any external changes (will that ever happen?) num_iterations_spinner = QSpinBox() num_iterations_spinner.setMinimum(1) num_iterations_spinner.setMaximum(100) num_iterations_spinner.setValue(getNumberOfIterations()) addHelpToWidget(num_iterations_spinner, "config/simulation/number_of_iterations") num_iterations_spinner.valueChanged[int].connect(setNumberOfIterations) layout.addRow("Number of iterations:", num_iterations_spinner) self._iterated_target_case_format_model = TargetCaseModel(format_mode=True) self._iterated_target_case_format_field = StringBox(self._iterated_target_case_format_model, "config/simulation/iterated_target_case_format") self._iterated_target_case_format_field.setValidator(ProperNameFormatArgument()) layout.addRow("Target case format:", self._iterated_target_case_format_field) self._analysis_module_selector = AnalysisModuleSelector(iterable=True, help_link="config/analysis/analysis_module") layout.addRow("Analysis Module:", self._analysis_module_selector) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox(self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator(RangeStringArgument(getRealizationCount())) layout.addRow("Active realizations", self._active_realizations_field) self._iterated_target_case_format_field.getValidationSupport().validationChanged.connect(self.simulationConfigurationChanged) self._active_realizations_field.getValidationSupport().validationChanged.connect(self.simulationConfigurationChanged) self.setLayout(layout)
def __init__(self): SimulationConfigPanel.__init__(self, EnsembleExperiment) self.setObjectName("Ensemble_experiment_panel") layout = QFormLayout() self._case_selector = CaseSelector() layout.addRow("Current case:", self._case_selector) run_path_label = QLabel("<b>%s</b>" % getRunPath()) addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) number_of_realizations_label = QLabel("<b>%d</b>" % getRealizationCount()) addHelpToWidget(number_of_realizations_label, "config/ensemble/num_realizations") layout.addRow(QLabel("Number of realizations:"), number_of_realizations_label) self._active_realizations_field = StringBox( ActiveRealizationsModel(), "config/simulation/active_realizations", ) self._active_realizations_field.setValidator( RangeStringArgument(getRealizationCount()), ) layout.addRow("Active realizations", self._active_realizations_field) self._iter_field = StringBox( IterValueModel(), "config/simulation/iter_num", ) self._iter_field.setValidator(IntegerArgument(from_value=0), ) layout.addRow("Iteration", self._iter_field) self.setLayout(layout) self._active_realizations_field.getValidationSupport( ).validationChanged.connect(self.simulationConfigurationChanged) self._case_selector.currentIndexChanged.connect( self._realizations_from_fs) self._realizations_from_fs() # update with the current case
def __init__(self, ert, notifier): self.ert = ert facade = LibresFacade(ert) SimulationConfigPanel.__init__(self, SingleTestRun) self.setObjectName("Single_test_run_panel") layout = QFormLayout() case_selector = CaseSelector(facade, notifier) layout.addRow("Current case:", case_selector) run_path_label = QLabel( f"<b>{self.ert.getModelConfig().getRunpathAsString()}</b>" ) addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) self._active_realizations_model = ActiveRealizationsModel(facade) self.setLayout(layout)
def __init__(self): QWidget.__init__(self) self.setMinimumWidth(500) self.setMinimumHeight(200) self._dynamic = False self.setWindowTitle("Load results manually") self.activateWindow() layout = QFormLayout() current_case = getCurrentCaseName() run_path_text = QTextEdit() run_path_text.setText(self.readCurrentRunPath()) run_path_text.setDisabled(True) run_path_text.setFixedHeight(80) layout.addRow("Load data from current run path: ",run_path_text) self._case_model = AllCasesModel() self._case_combo = QComboBox() self._case_combo.setSizeAdjustPolicy(QComboBox.AdjustToMinimumContentsLength) self._case_combo.setMinimumContentsLength(20) self._case_combo.setModel(self._case_model) self._case_combo.setCurrentIndex(self._case_model.indexOf(current_case)) layout.addRow("Load into case:", self._case_combo) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox(self._active_realizations_model, "load_results_manually/Realizations") self._active_realizations_field.setValidator(RangeStringArgument()) layout.addRow("Realizations to load:", self._active_realizations_field) iterations_count = LoadResultsModel.getIterationCount() self._iterations_model = ValueModel(iterations_count) self._iterations_field = StringBox(self._iterations_model, "load_results_manually/iterations") self._iterations_field.setValidator(IntegerArgument()) layout.addRow("Iteration to load:", self._iterations_field) self.setLayout(layout)
class LoadResultsPanel(QWidget): def __init__(self): QWidget.__init__(self) self.setMinimumWidth(500) self.setMinimumHeight(200) self._dynamic = False self.setWindowTitle("Load results manually") self.activateWindow() layout = QFormLayout() current_case = getCurrentCaseName() run_path_text = QTextEdit() run_path_text.setText(self.readCurrentRunPath()) run_path_text.setDisabled(True) run_path_text.setFixedHeight(80) layout.addRow("Load data from current run path: ", run_path_text) self._case_model = AllCasesModel() self._case_combo = QComboBox() self._case_combo.setSizeAdjustPolicy( QComboBox.AdjustToMinimumContentsLength) self._case_combo.setMinimumContentsLength(20) self._case_combo.setModel(self._case_model) self._case_combo.setCurrentIndex( self._case_model.indexOf(current_case)) layout.addRow("Load into case:", self._case_combo) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox( self._active_realizations_model, "load_results_manually/Realizations") self._active_realizations_field.setValidator(RangeStringArgument()) layout.addRow("Realizations to load:", self._active_realizations_field) iterations_count = LoadResultsModel.getIterationCount() self._iterations_model = ValueModel(iterations_count) self._iterations_field = StringBox(self._iterations_model, "load_results_manually/iterations") self._iterations_field.setValidator(IntegerArgument(from_value=1)) layout.addRow("Iteration to load:", self._iterations_field) self.setLayout(layout) def readCurrentRunPath(self): current_case = getCurrentCaseName() run_path = LoadResultsModel.getCurrentRunPath() run_path = run_path.replace("<ERTCASE>", current_case) run_path = run_path.replace("<ERT-CASE>", current_case) return run_path def load(self): all_cases = self._case_model.getAllItems() selected_case = all_cases[self._case_combo.currentIndex()] realizations = self._active_realizations_model.getActiveRealizationsMask( ) iteration = self._iterations_model.getActiveIteration() LoadResultsModel.loadResults(selected_case, realizations, iteration) def setCurrectCase(self): current_case = getCurrentCaseName() self._case_combo.setCurrentIndex( self._case_model.indexOf(current_case))
class LoadResultsPanel(QWidget): def __init__(self): QWidget.__init__(self) self.setMinimumWidth(500) self.setMinimumHeight(200) self._dynamic = False self.setWindowTitle("Load results manually") self.activateWindow() layout = QFormLayout() current_case = getCurrentCaseName() run_path_text = QTextEdit() run_path_text.setText(self.readCurrentRunPath()) run_path_text.setDisabled(True) run_path_text.setFixedHeight(80) layout.addRow("Load data from current run path: ",run_path_text) self._case_model = AllCasesModel() self._case_combo = QComboBox() self._case_combo.setSizeAdjustPolicy(QComboBox.AdjustToMinimumContentsLength) self._case_combo.setMinimumContentsLength(20) self._case_combo.setModel(self._case_model) self._case_combo.setCurrentIndex(self._case_model.indexOf(current_case)) layout.addRow("Load into case:", self._case_combo) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox(self._active_realizations_model, "load_results_manually/Realizations") self._active_realizations_field.setValidator(RangeStringArgument()) layout.addRow("Realizations to load:", self._active_realizations_field) iterations_count = LoadResultsModel.getIterationCount() self._iterations_model = ValueModel(iterations_count) self._iterations_field = StringBox(self._iterations_model, "load_results_manually/iterations") self._iterations_field.setValidator(IntegerArgument()) layout.addRow("Iteration to load:", self._iterations_field) self.setLayout(layout) def readCurrentRunPath(self): current_case = getCurrentCaseName() run_path = LoadResultsModel.getCurrentRunPath() run_path = run_path.replace("<ERTCASE>",current_case) run_path = run_path.replace("<ERT-CASE>",current_case) return run_path def load(self): all_cases = self._case_model.getAllItems() selected_case = all_cases[self._case_combo.currentIndex()] realizations = self._active_realizations_model.getActiveRealizationsMask() iteration = self._iterations_model.getValue() try: if iteration is None: iteration = '' iteration = int(iteration) except ValueError as e: print('Expected a (whole) number in iteration field, got "%s". Error message: %s.' % (iteration, e)) return False loaded = LoadResultsModel.loadResults(selected_case, realizations, iteration) if loaded > 0: print('Successfully loaded %d realisations.' % loaded) else: print('No realisations loaded.') return loaded def setCurrectCase(self): current_case = getCurrentCaseName() self._case_combo.setCurrentIndex(self._case_model.indexOf(current_case))
def __init__(self, parent=None): QWidget.__init__(self, parent) self.setMinimumWidth(500) self.setMinimumHeight(200) self._dynamic = False self.setWindowTitle("Export data") self.activateWindow() layout = QFormLayout() current_case = getCurrentCaseName() self._case_model = AllCasesModel() self._case_combo = QComboBox() self._case_combo.setSizeAdjustPolicy(QComboBox.AdjustToMinimumContentsLength) self._case_combo.setMinimumContentsLength(20) self._case_combo.setModel(self._case_model) self._case_combo.setCurrentIndex(self._case_model.indexOf(current_case)) layout.addRow("Select case:", self._case_combo) self._export_keyword_model = ExportKeywordModel() self._kw_model = self._export_keyword_model.getKeyWords() self._keywords = QComboBox() self._keywords.addItems(self._kw_model) layout.addRow("Select keyword:", self._keywords) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox(self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator(RangeStringArgument()) self._active_realizations_field.getValidationSupport().validationChanged.connect(self.validateExportDialog) layout.addRow("Active realizations:", self._active_realizations_field) file_name_button = QToolButton() file_name_button.setText("Browse") file_name_button.clicked.connect(self.selectFileDirectory) self._defaultPath = QDir.currentPath() + "/export" self._file_name = QLineEdit() self._file_name.setEnabled(False) self._file_name.setText(self._defaultPath) self._file_name.textChanged.connect(self.validateExportDialog) self._file_name.setMinimumWidth(250) file_name_layout = QHBoxLayout() file_name_layout.addWidget(self._file_name) file_name_layout.addWidget(file_name_button) layout.addRow("Select directory to save files to:", file_name_layout) self._gen_kw_file_types = ["Parameter list", "Template based"] self._field_kw_file_types = ["Eclipse GRDECL", "RMS roff"] self._gen_data_file_types = ["Gen data"] self._file_type_model = self._field_kw_file_types self._file_type_combo = QComboBox() self._file_type_combo.setSizeAdjustPolicy(QComboBox.AdjustToContents) self._file_type_combo.addItems(self._file_type_model) layout.addRow("Select file format:", self._file_type_combo) self._report_step = QLineEdit() layout.addRow("Report step:", self._report_step) self._gen_data_report_step_model = [] self._gen_data_report_step = QComboBox() layout.addRow("Report step:", self._gen_data_report_step) self.setLayout(layout) self._keywords.currentIndexChanged.connect(self.keywordSelected) self.keywordSelected()
class MultipleDataAssimilationPanel(SimulationConfigPanel): def __init__(self): SimulationConfigPanel.__init__(self, MultipleDataAssimilation()) layout = QFormLayout() case_selector = CaseSelector() layout.addRow("Current case:", case_selector) run_path_label = QLabel("<b>%s</b>" % getRunPath()) addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) number_of_realizations_label = QLabel("<b>%d</b>" % getRealizationCount()) addHelpToWidget(number_of_realizations_label, "config/ensemble/num_realizations") layout.addRow(QLabel("Number of realizations:"), number_of_realizations_label) self._target_case_format_model = TargetCaseModel(format_mode=True) self._target_case_format_field = StringBox(self._target_case_format_model, "config/simulation/target_case_format") self._target_case_format_field.setValidator(ProperNameFormatArgument()) layout.addRow("Target case format:", self._target_case_format_field) self._createInputForWeights(layout) self._analysis_module_selector = AnalysisModuleSelector(iterable=False, help_link="config/analysis/analysis_module") layout.addRow("Analysis Module:", self._analysis_module_selector) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox(self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator(RangeStringArgument(getRealizationCount())) layout.addRow("Active realizations", self._active_realizations_field) self._target_case_format_field.getValidationSupport().validationChanged.connect(self.simulationConfigurationChanged) self._active_realizations_field.getValidationSupport().validationChanged.connect(self.simulationConfigurationChanged) self._relative_iteration_weights_box.getValidationSupport().validationChanged.connect(self.simulationConfigurationChanged) self.setLayout(layout) def _createInputForWeights(self, layout): relative_iteration_weights_model = ValueModel(self.getSimulationModel().getWeights()) self._relative_iteration_weights_box = StringBox(relative_iteration_weights_model, help_link="config/simulation/iteration_weights", continuous_update=True) self._relative_iteration_weights_box.setValidator(NumberListStringArgument()) layout.addRow("Relative Weights:", self._relative_iteration_weights_box) relative_iteration_weights_model.valueChanged.connect(self.getSimulationModel().setWeights) normalized_weights_model = ValueModel() normalized_weights_widget = ActiveLabel(normalized_weights_model, help_link="config/simulation/iteration_weights") layout.addRow('Normalized weights:', normalized_weights_widget) def updateVisualizationOfNormalizedWeights(): if self._relative_iteration_weights_box.isValid(): weights = MultipleDataAssimilation.parseWeights(relative_iteration_weights_model.getValue()) normalized_weights = MultipleDataAssimilation.normalizeWeights(weights) normalized_weights_model.setValue(", ".join("%.2f" % x for x in normalized_weights)) else: normalized_weights_model.setValue("The weights are invalid!") self._relative_iteration_weights_box.getValidationSupport().validationChanged.connect(updateVisualizationOfNormalizedWeights) updateVisualizationOfNormalizedWeights() # To normalize the default weights def isConfigurationValid(self): return self._target_case_format_field.isValid() and self._active_realizations_field.isValid() and self._relative_iteration_weights_box.isValid() def toggleAdvancedOptions(self, show_advanced): self._active_realizations_field.setVisible(show_advanced) self.layout().labelForField(self._active_realizations_field).setVisible(show_advanced) self._analysis_module_selector.setVisible(show_advanced) self.layout().labelForField(self._analysis_module_selector).setVisible(show_advanced) def getSimulationArguments(self): arguments = {"active_realizations": self._active_realizations_model.getActiveRealizationsMask(), "target_case": self._target_case_format_model.getValue(), "analysis_module": self._analysis_module_selector.getSelectedAnalysisModuleName() } return arguments
class ExportPanel(QWidget): updateExportButton = pyqtSignal(str, bool) runExport = pyqtSignal(dict) def __init__(self, parent=None): QWidget.__init__(self, parent) self.setMinimumWidth(500) self.setMinimumHeight(200) self._dynamic = False self.setWindowTitle("Export data") self.activateWindow() layout = QFormLayout() current_case = getCurrentCaseName() self._case_model = AllCasesModel() self._case_combo = QComboBox() self._case_combo.setSizeAdjustPolicy(QComboBox.AdjustToMinimumContentsLength) self._case_combo.setMinimumContentsLength(20) self._case_combo.setModel(self._case_model) self._case_combo.setCurrentIndex(self._case_model.indexOf(current_case)) layout.addRow("Select case:", self._case_combo) self._export_keyword_model = ExportKeywordModel() self._kw_model = self._export_keyword_model.getKeyWords() self._keywords = QComboBox() self._keywords.addItems(self._kw_model) layout.addRow("Select keyword:", self._keywords) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox(self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator(RangeStringArgument()) self._active_realizations_field.getValidationSupport().validationChanged.connect(self.validateExportDialog) layout.addRow("Active realizations:", self._active_realizations_field) file_name_button = QToolButton() file_name_button.setText("Browse") file_name_button.clicked.connect(self.selectFileDirectory) self._defaultPath = QDir.currentPath() + "/export" self._file_name = QLineEdit() self._file_name.setEnabled(False) self._file_name.setText(self._defaultPath) self._file_name.textChanged.connect(self.validateExportDialog) self._file_name.setMinimumWidth(250) file_name_layout = QHBoxLayout() file_name_layout.addWidget(self._file_name) file_name_layout.addWidget(file_name_button) layout.addRow("Select directory to save files to:", file_name_layout) self._gen_kw_file_types = ["Parameter list", "Template based"] self._field_kw_file_types = ["Eclipse GRDECL", "RMS roff"] self._gen_data_file_types = ["Gen data"] self._file_type_model = self._field_kw_file_types self._file_type_combo = QComboBox() self._file_type_combo.setSizeAdjustPolicy(QComboBox.AdjustToContents) self._file_type_combo.addItems(self._file_type_model) layout.addRow("Select file format:", self._file_type_combo) self._report_step = QLineEdit() layout.addRow("Report step:", self._report_step) self._gen_data_report_step_model = [] self._gen_data_report_step = QComboBox() layout.addRow("Report step:", self._gen_data_report_step) self.setLayout(layout) self._keywords.currentIndexChanged.connect(self.keywordSelected) self.keywordSelected() def selectFileDirectory(self): directory = QFileDialog().getExistingDirectory(self, "Directory", self._file_name.text(), QFileDialog.ShowDirsOnly) if str(directory).__len__() > 0: self._file_name.setText(str(directory)) def updateFileExportType(self, keyword): self._file_type_combo.clear() if self._export_keyword_model.isGenKw(keyword): self._file_type_model = self._gen_kw_file_types elif self._export_keyword_model.isGenParamKw(keyword): self._file_type_model = self._gen_data_file_types elif self._export_keyword_model.isGenDataKw(keyword): self._file_type_model = self._gen_data_file_types else: self._file_type_model = self._field_kw_file_types self._file_type_combo.addItems(self._file_type_model) def export(self): keyword = self._kw_model[self._keywords.currentIndex()] try: report_step = self.getReportStep(keyword) except IndexError as e: QMessageBox.question(self, 'Error', e.args[0], QMessageBox.NoButton) return all_cases = self._case_model.getAllItems() selected_case = all_cases[self._case_combo.currentIndex()] path = self._file_name.text() iactive = self._active_realizations_model.getActiveRealizationsMask() file_type_key = self._file_type_model[self._file_type_combo.currentIndex()] values = {"keyword": keyword, "report_step": report_step, "iactive": iactive, "file_type_key": file_type_key, "path": path, "selected_case": selected_case} self.runExport.emit(values) def getReportStep(self, key): report_step = 0 if self._dynamic: report_step = self._report_step.text() if self._export_keyword_model.isGenParamKw(key): return report_step if self._export_keyword_model.isGenDataKw(key): lst = self._gen_data_report_step_model idx = self._gen_data_report_step.currentIndex() if lst and len(lst) > idx: report_step = lst[idx] else: raise IndexError('No such model step: %d. Valid range: [0, %d)' % (idx, len(lst))) return report_step def keywordSelected(self): key = self._kw_model[self._keywords.currentIndex()] self.updateFileExportType(key) self._dynamic = False if self._export_keyword_model.isFieldKw(key): self._dynamic = self._export_keyword_model.isDynamicField(key) self._report_step.setVisible(self._dynamic) self.layout().labelForField(self._report_step).setVisible(self._dynamic) self._gen_data_report_step.setVisible(self._export_keyword_model.isGenDataKw(key)) self.layout().labelForField(self._gen_data_report_step).setVisible(self._export_keyword_model.isGenDataKw(key)) if self._export_keyword_model.isGenDataKw(key): data = self._export_keyword_model.getGenDataReportSteps(key) self._gen_data_report_step_model = data self._gen_data_report_step.clear() self._gen_data_report_step.addItems(self._gen_data_report_step_model) def setSelectedCase(self, selected_case): self._case_combo.setCurrentIndex(self._case_model.indexOf(selected_case)) def validateExportDialog(self): validRealizations = False if self._active_realizations_field.isValid(): validRealizations = True path = str(self._file_name.text()) validPath = len(path) > 0 if validRealizations and validPath: self.updateExportButton.emit("export", True) else: self.updateExportButton.emit("export", False)
class IteratedEnsembleSmootherPanel(SimulationConfigPanel): def __init__(self, advanced_option=False): SimulationConfigPanel.__init__(self, IteratedEnsembleSmoother( getQueueConfig( )), advanced_option) layout = QFormLayout() case_selector = CaseSelector() layout.addRow("Current case:", case_selector) run_path_label = QLabel("<b>%s</b>" % getRunPath()) addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) number_of_realizations_label = QLabel("<b>%d</b>" % getRealizationCount()) addHelpToWidget(number_of_realizations_label, "config/ensemble/num_realizations") layout.addRow(QLabel("Number of realizations:"), number_of_realizations_label) # The num_iterations_spinner does not track any external changes (will that ever happen?) num_iterations_spinner = QSpinBox() num_iterations_spinner.setMinimum(1) num_iterations_spinner.setMaximum(100) num_iterations_spinner.setValue(getNumberOfIterations()) addHelpToWidget(num_iterations_spinner, "config/simulation/number_of_iterations") num_iterations_spinner.valueChanged[int].connect(setNumberOfIterations) layout.addRow("Number of iterations:", num_iterations_spinner) self._iterated_target_case_format_model = TargetCaseModel(format_mode=True) self._iterated_target_case_format_field = StringBox(self._iterated_target_case_format_model, "config/simulation/iterated_target_case_format") self._iterated_target_case_format_field.setValidator(ProperNameFormatArgument()) layout.addRow("Target case format:", self._iterated_target_case_format_field) self._analysis_module_selector = AnalysisModuleSelector(iterable=True, help_link="config/analysis/analysis_module") layout.addRow("Analysis Module:", self._analysis_module_selector) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox(self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator(RangeStringArgument(getRealizationCount())) layout.addRow("Active realizations", self._active_realizations_field) self._iterated_target_case_format_field.getValidationSupport().validationChanged.connect(self.simulationConfigurationChanged) self._active_realizations_field.getValidationSupport().validationChanged.connect(self.simulationConfigurationChanged) self.setLayout(layout) def isConfigurationValid(self): analysis_module = self._analysis_module_selector.getSelectedAnalysisModuleName() return self._iterated_target_case_format_field.isValid() and self._active_realizations_field.isValid() and analysis_module is not None def toggleAdvancedOptions(self, show_advanced): self._active_realizations_field.setVisible(show_advanced) self.layout().labelForField(self._active_realizations_field).setVisible(show_advanced) self._analysis_module_selector.setVisible(show_advanced) self.layout().labelForField(self._analysis_module_selector).setVisible(show_advanced) def getSimulationArguments(self): arguments = {"active_realizations": self._active_realizations_model.getActiveRealizationsMask(), "target_case": self._iterated_target_case_format_model.getValue(), "analysis_module": self._analysis_module_selector.getSelectedAnalysisModuleName() } return arguments
class ExportPanel(QWidget): updateExportButton = Signal(str, bool) runExport = Signal(dict) def __init__(self, parent=None): QWidget.__init__(self, parent) self.setMinimumWidth(500) self.setMinimumHeight(200) self._dynamic = False self.setWindowTitle("Export data") self.activateWindow() layout = QFormLayout() current_case = getCurrentCaseName() self._case_model = AllCasesModel() self._case_combo = QComboBox() self._case_combo.setSizeAdjustPolicy(QComboBox.AdjustToMinimumContentsLength) self._case_combo.setMinimumContentsLength(20) self._case_combo.setModel(self._case_model) self._case_combo.setCurrentIndex(self._case_model.indexOf(current_case)) layout.addRow("Select case:", self._case_combo) self._export_keyword_model = ExportKeywordModel() self._kw_model = self._export_keyword_model.getKeyWords() self._keywords = QComboBox() self._keywords.addItems(self._kw_model) layout.addRow("Select keyword:", self._keywords) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox(self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator(RangeStringArgument()) self._active_realizations_field.getValidationSupport().validationChanged.connect(self.validateExportDialog) layout.addRow("Active realizations:", self._active_realizations_field) file_name_button = QToolButton() file_name_button.setText("Browse") file_name_button.clicked.connect(self.selectFileDirectory) self._defaultPath = QDir.currentPath() + "/export" self._file_name = QLineEdit() self._file_name.setEnabled(False) self._file_name.setText(self._defaultPath) self._file_name.textChanged.connect(self.validateExportDialog) self._file_name.setMinimumWidth(250) file_name_layout = QHBoxLayout() file_name_layout.addWidget(self._file_name) file_name_layout.addWidget(file_name_button) layout.addRow("Select directory to save files to:", file_name_layout) self._gen_kw_file_types = ["Parameter list", "Template based"] self._field_kw_file_types = ["Eclipse GRDECL", "RMS roff"] self._gen_data_file_types = ["Gen data"] self._file_type_model = self._field_kw_file_types self._file_type_combo = QComboBox() self._file_type_combo.setSizeAdjustPolicy(QComboBox.AdjustToContents) self._file_type_combo.addItems(self._file_type_model) layout.addRow("Select file format:", self._file_type_combo) self._report_step = QLineEdit() layout.addRow("Report step:", self._report_step) self._gen_data_report_step_model = [] self._gen_data_report_step = QComboBox() layout.addRow("Report step:", self._gen_data_report_step) self.setLayout(layout) self._keywords.currentIndexChanged.connect(self.keywordSelected) self.keywordSelected() def selectFileDirectory(self): directory = QFileDialog().getExistingDirectory(self, "Directory", self._file_name.text(), QFileDialog.ShowDirsOnly) if str(directory).__len__() > 0: self._file_name.setText(str(directory)) def updateFileExportType(self, keyword): self._file_type_combo.clear() if self._export_keyword_model.isGenKw(keyword): self._file_type_model = self._gen_kw_file_types elif self._export_keyword_model.isGenParamKw(keyword): self._file_type_model = self._gen_data_file_types elif self._export_keyword_model.isGenDataKw(keyword): self._file_type_model = self._gen_data_file_types else: self._file_type_model = self._field_kw_file_types self._file_type_combo.addItems(self._file_type_model) def export(self): keyword = self._kw_model[self._keywords.currentIndex()] try: report_step = self.getReportStep(keyword) except IndexError as e: QMessageBox.question(self, 'Error', e.args[0], QMessageBox.NoButton) return all_cases = self._case_model.getAllItems() selected_case = all_cases[self._case_combo.currentIndex()] path = self._file_name.text() iactive = self._active_realizations_model.getActiveRealizationsMask() file_type_key = self._file_type_model[self._file_type_combo.currentIndex()] values = {"keyword": keyword, "report_step": report_step, "iactive": iactive, "file_type_key": file_type_key, "path": path, "selected_case": selected_case} self.runExport.emit(values) def getReportStep(self, key): report_step = 0 if self._dynamic: report_step = self._report_step.text() if self._export_keyword_model.isGenParamKw(key): return report_step if self._export_keyword_model.isGenDataKw(key): lst = self._gen_data_report_step_model idx = self._gen_data_report_step.currentIndex() if lst and len(lst) > idx: report_step = lst[idx] else: raise IndexError('No such model step: %d. Valid range: [0, %d)' % (idx, len(lst))) return report_step def keywordSelected(self): key = self._kw_model[self._keywords.currentIndex()] self.updateFileExportType(key) self._dynamic = False if self._export_keyword_model.isFieldKw(key): self._dynamic = self._export_keyword_model.isDynamicField(key) self._report_step.setVisible(self._dynamic) self.layout().labelForField(self._report_step).setVisible(self._dynamic) self._gen_data_report_step.setVisible(self._export_keyword_model.isGenDataKw(key)) self.layout().labelForField(self._gen_data_report_step).setVisible(self._export_keyword_model.isGenDataKw(key)) if self._export_keyword_model.isGenDataKw(key): data = self._export_keyword_model.getGenDataReportSteps(key) self._gen_data_report_step_model = data self._gen_data_report_step.clear() self._gen_data_report_step.addItems(self._gen_data_report_step_model) def setSelectedCase(self, selected_case): self._case_combo.setCurrentIndex(self._case_model.indexOf(selected_case)) def validateExportDialog(self): validRealizations = False if self._active_realizations_field.isValid(): validRealizations = True path = str(self._file_name.text()) validPath = len(path) > 0 if validRealizations and validPath: self.updateExportButton.emit("export", True) else: self.updateExportButton.emit("export", False)
def __init__(self, facade: LibresFacade, notifier: ErtNotifier): SimulationConfigPanel.__init__(self, MultipleDataAssimilation) layout = QFormLayout() case_selector = CaseSelector(facade, notifier) layout.addRow("Current case:", case_selector) run_path_label = QLabel(f"<b>{facade.run_path}</b>") addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) number_of_realizations_label = QLabel( f"<b>{facade.get_ensemble_size()}</b>") addHelpToWidget(number_of_realizations_label, "config/ensemble/num_realizations") layout.addRow(QLabel("Number of realizations:"), number_of_realizations_label) self._target_case_format_model = TargetCaseModel(facade, notifier, format_mode=True) self._target_case_format_field = StringBox( self._target_case_format_model, "config/simulation/target_case_format") self._target_case_format_field.setValidator(ProperNameFormatArgument()) layout.addRow("Target case format:", self._target_case_format_field) self.weights = MultipleDataAssimilation.default_weights self._createInputForWeights(layout) self._iter_field = StringBox( IterValueModel(notifier), "config/simulation/iter_num", ) self._iter_field.setValidator(IntegerArgument(from_value=0), ) layout.addRow("Start iteration:", self._iter_field) self._analysis_module_edit = AnalysisModuleEdit( facade, module_name=MultipleDataAssimilationPanel.analysis_module_name, help_link="config/analysis/analysis_module", ) layout.addRow("Analysis module:", self._analysis_module_edit) self._active_realizations_model = ActiveRealizationsModel(facade) self._active_realizations_field = StringBox( self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator( RangeStringArgument(facade.get_ensemble_size())) layout.addRow("Active realizations:", self._active_realizations_field) self._target_case_format_field.getValidationSupport( ).validationChanged.connect( # noqa self.simulationConfigurationChanged) self._active_realizations_field.getValidationSupport( ).validationChanged.connect( # noqa self.simulationConfigurationChanged) self._relative_iteration_weights_box.getValidationSupport( ).validationChanged.connect( # noqa self.simulationConfigurationChanged) self.setLayout(layout)
def __init__(self, facade: LibresFacade, notifier: ErtNotifier): self.facade = facade self.notifier = notifier SimulationConfigPanel.__init__(self, IteratedEnsembleSmoother) layout = QFormLayout() case_selector = CaseSelector(self.facade, notifier) layout.addRow("Current case:", case_selector) run_path_label = QLabel(f"<b>{self.facade.run_path}</b>") addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) number_of_realizations_label = QLabel( f"<b>{self.facade.get_ensemble_size()}</b>") addHelpToWidget(number_of_realizations_label, "config/ensemble/num_realizations") layout.addRow(QLabel("Number of realizations:"), number_of_realizations_label) # The num_iterations_spinner does not track any external changes (will # that ever happen?) self._num_iterations_spinner = QSpinBox() self._num_iterations_spinner.setMinimum(1) self._num_iterations_spinner.setMaximum(100) self._num_iterations_spinner.setValue( self.facade.get_number_of_iterations()) addHelpToWidget(self._num_iterations_spinner, "config/simulation/number_of_iterations") self._num_iterations_spinner.valueChanged[int].connect( self.setNumberIterations) layout.addRow("Number of iterations:", self._num_iterations_spinner) self._iterated_target_case_format_model = TargetCaseModel( self.facade, notifier, format_mode=True) self._iterated_target_case_format_field = StringBox( self._iterated_target_case_format_model, "config/simulation/iterated_target_case_format", ) self._iterated_target_case_format_field.setValidator( ProperNameFormatArgument()) layout.addRow("Target case format:", self._iterated_target_case_format_field) self._analysis_module_edit = AnalysisModuleEdit( self.facade, module_name=IteratedEnsembleSmootherPanel.analysis_module_name, help_link="config/analysis/analysis_module", ) layout.addRow("Analysis module:", self._analysis_module_edit) self._active_realizations_model = ActiveRealizationsModel(self.facade) self._active_realizations_field = StringBox( self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator( RangeStringArgument(self.facade.get_ensemble_size())) layout.addRow("Active realizations", self._active_realizations_field) self._iterated_target_case_format_field.getValidationSupport( ).validationChanged.connect( # noqa self.simulationConfigurationChanged) self._active_realizations_field.getValidationSupport( ).validationChanged.connect( # noqa self.simulationConfigurationChanged) self.setLayout(layout)
class MultipleDataAssimilationPanel(SimulationConfigPanel): def __init__(self): SimulationConfigPanel.__init__(self, MultipleDataAssimilation) layout = QFormLayout() case_selector = CaseSelector() layout.addRow("Current case:", case_selector) run_path_label = QLabel("<b>%s</b>" % getRunPath()) addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) number_of_realizations_label = QLabel("<b>%d</b>" % getRealizationCount()) addHelpToWidget(number_of_realizations_label, "config/ensemble/num_realizations") layout.addRow(QLabel("Number of realizations:"), number_of_realizations_label) self._target_case_format_model = TargetCaseModel(format_mode=True) self._target_case_format_field = StringBox( self._target_case_format_model, "config/simulation/target_case_format") self._target_case_format_field.setValidator(ProperNameFormatArgument()) layout.addRow("Target case format:", self._target_case_format_field) self.weights = MultipleDataAssimilation.default_weights self._createInputForWeights(layout) self._iter_field = StringBox( IterValueModel(), "config/simulation/iter_num", ) self._iter_field.setValidator(IntegerArgument(from_value=0), ) layout.addRow("Start iteration:", self._iter_field) self._analysis_module_selector = AnalysisModuleSelector( iterable=False, help_link="config/analysis/analysis_module") layout.addRow("Analysis Module:", self._analysis_module_selector) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox( self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator( RangeStringArgument(getRealizationCount())) layout.addRow("Active realizations:", self._active_realizations_field) self._target_case_format_field.getValidationSupport( ).validationChanged.connect(self.simulationConfigurationChanged) self._active_realizations_field.getValidationSupport( ).validationChanged.connect(self.simulationConfigurationChanged) self._relative_iteration_weights_box.getValidationSupport( ).validationChanged.connect(self.simulationConfigurationChanged) self.setLayout(layout) def _createInputForWeights(self, layout): relative_iteration_weights_model = ValueModel(self.weights) self._relative_iteration_weights_box = StringBox( relative_iteration_weights_model, help_link="config/simulation/iteration_weights", continuous_update=True) self._relative_iteration_weights_box.setValidator( NumberListStringArgument()) layout.addRow("Relative Weights:", self._relative_iteration_weights_box) relative_iteration_weights_model.valueChanged.connect(self.setWeights) normalized_weights_model = ValueModel() normalized_weights_widget = ActiveLabel( normalized_weights_model, help_link="config/simulation/iteration_weights") layout.addRow('Normalized weights:', normalized_weights_widget) def updateVisualizationOfNormalizedWeights(): if self._relative_iteration_weights_box.isValid(): weights = MultipleDataAssimilation.parseWeights( relative_iteration_weights_model.getValue()) normalized_weights = MultipleDataAssimilation.normalizeWeights( weights) normalized_weights_model.setValue(", ".join( "%.2f" % x for x in normalized_weights)) else: normalized_weights_model.setValue("The weights are invalid!") self._relative_iteration_weights_box.getValidationSupport( ).validationChanged.connect(updateVisualizationOfNormalizedWeights) updateVisualizationOfNormalizedWeights( ) # To normalize the default weights def isConfigurationValid(self): return self._target_case_format_field.isValid( ) and self._active_realizations_field.isValid( ) and self._relative_iteration_weights_box.isValid() def getSimulationArguments(self): arguments = { "active_realizations": self._active_realizations_model.getActiveRealizationsMask(), "target_case": self._target_case_format_model.getValue(), "analysis_module": self._analysis_module_selector.getSelectedAnalysisModuleName(), "weights": self.weights, "start_iteration": int(self._iter_field.model.getValue()) } return arguments def setWeights(self, weights): str_weights = str(weights) print("Weights changed: %s" % str_weights) self.weights = str_weights
class LoadResultsPanel(QWidget): def __init__(self): QWidget.__init__(self) self.setMinimumWidth(500) self.setMinimumHeight(200) self._dynamic = False self.setWindowTitle("Load results manually") self.activateWindow() layout = QFormLayout() current_case = getCurrentCaseName() run_path_text = QTextEdit() run_path_text.setText(self.readCurrentRunPath()) run_path_text.setDisabled(True) run_path_text.setFixedHeight(80) layout.addRow("Load data from current run path: ",run_path_text) self._case_model = AllCasesModel() self._case_combo = QComboBox() self._case_combo.setSizeAdjustPolicy(QComboBox.AdjustToMinimumContentsLength) self._case_combo.setMinimumContentsLength(20) self._case_combo.setModel(self._case_model) self._case_combo.setCurrentIndex(self._case_model.indexOf(current_case)) layout.addRow("Load into case:", self._case_combo) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox(self._active_realizations_model, "load_results_manually/Realizations") self._active_realizations_field.setValidator(RangeStringArgument()) layout.addRow("Realizations to load:", self._active_realizations_field) iterations_count = LoadResultsModel.getIterationCount() self._iterations_model = ValueModel(iterations_count) self._iterations_field = StringBox(self._iterations_model, "load_results_manually/iterations") self._iterations_field.setValidator(IntegerArgument(from_value=1)) layout.addRow("Iteration to load:", self._iterations_field) self.setLayout(layout) def readCurrentRunPath(self): current_case = getCurrentCaseName() run_path = LoadResultsModel.getCurrentRunPath() run_path = run_path.replace("<ERTCASE>",current_case) run_path = run_path.replace("<ERT-CASE>",current_case) return run_path def load(self): all_cases = self._case_model.getAllItems() selected_case = all_cases[self._case_combo.currentIndex()] realizations = self._active_realizations_model.getActiveRealizationsMask() iteration = self._iterations_model.getActiveIteration() LoadResultsModel.loadResults(selected_case, realizations, iteration) def setCurrectCase(self): current_case = getCurrentCaseName() self._case_combo.setCurrentIndex(self._case_model.indexOf(current_case))
class IteratedEnsembleSmootherPanel(SimulationConfigPanel): def __init__(self): SimulationConfigPanel.__init__(self, IteratedEnsembleSmoother()) layout = QFormLayout() case_selector = CaseSelector() layout.addRow("Current case:", case_selector) run_path_label = QLabel("<b>%s</b>" % getRunPath()) addHelpToWidget(run_path_label, "config/simulation/runpath") layout.addRow("Runpath:", run_path_label) number_of_realizations_label = QLabel("<b>%d</b>" % getRealizationCount()) addHelpToWidget(number_of_realizations_label, "config/ensemble/num_realizations") layout.addRow(QLabel("Number of realizations:"), number_of_realizations_label) # The num_iterations_spinner does not track any external changes (will that ever happen?) num_iterations_spinner = QSpinBox() num_iterations_spinner.setMinimum(1) num_iterations_spinner.setMaximum(100) num_iterations_spinner.setValue(getNumberOfIterations()) addHelpToWidget(num_iterations_spinner, "config/simulation/number_of_iterations") num_iterations_spinner.valueChanged[int].connect(setNumberOfIterations) layout.addRow("Number of iterations:", num_iterations_spinner) self._iterated_target_case_format_model = TargetCaseModel(format_mode=True) self._iterated_target_case_format_field = StringBox(self._iterated_target_case_format_model, "config/simulation/iterated_target_case_format") self._iterated_target_case_format_field.setValidator(ProperNameFormatArgument()) layout.addRow("Target case format:", self._iterated_target_case_format_field) self._analysis_module_selector = AnalysisModuleSelector(iterable=True, help_link="config/analysis/analysis_module") layout.addRow("Analysis Module:", self._analysis_module_selector) self._active_realizations_model = ActiveRealizationsModel() self._active_realizations_field = StringBox(self._active_realizations_model, "config/simulation/active_realizations") self._active_realizations_field.setValidator(RangeStringArgument(getRealizationCount())) layout.addRow("Active realizations", self._active_realizations_field) self._iterated_target_case_format_field.getValidationSupport().validationChanged.connect(self.simulationConfigurationChanged) self._active_realizations_field.getValidationSupport().validationChanged.connect(self.simulationConfigurationChanged) self.setLayout(layout) def isConfigurationValid(self): analysis_module = self._analysis_module_selector.getSelectedAnalysisModuleName() return self._iterated_target_case_format_field.isValid() and self._active_realizations_field.isValid() and analysis_module is not None def toggleAdvancedOptions(self, show_advanced): self._active_realizations_field.setVisible(show_advanced) self.layout().labelForField(self._active_realizations_field).setVisible(show_advanced) self._analysis_module_selector.setVisible(show_advanced) self.layout().labelForField(self._analysis_module_selector).setVisible(show_advanced) def getSimulationArguments(self): arguments = {"active_realizations": self._active_realizations_model.getActiveRealizationsMask(), "target_case": self._iterated_target_case_format_model.getValue(), "analysis_module": self._analysis_module_selector.getSelectedAnalysisModuleName() } return arguments
class LoadResultsPanel(QWidget): def __init__(self, facade: LibresFacade): self.facade = facade QWidget.__init__(self) self.setMinimumWidth(500) self.setMinimumHeight(200) self._dynamic = False self.setWindowTitle("Load results manually") self.activateWindow() layout = QFormLayout() current_case = facade.get_current_case_name() run_path_text = QTextEdit() run_path_text.setText(self.readCurrentRunPath()) run_path_text.setDisabled(True) run_path_text.setFixedHeight(80) layout.addRow("Load data from current run path: ", run_path_text) self._case_model = AllCasesModel(self.facade) self._case_combo = QComboBox() self._case_combo.setSizeAdjustPolicy(QComboBox.AdjustToMinimumContentsLength) self._case_combo.setMinimumContentsLength(20) self._case_combo.setModel(self._case_model) self._case_combo.setCurrentIndex(self._case_model.indexOf(current_case)) layout.addRow("Load into case:", self._case_combo) self._active_realizations_model = ActiveRealizationsModel(self.facade) self._active_realizations_field = StringBox( self._active_realizations_model, "load_results_manually/Realizations" ) self._active_realizations_field.setValidator(RangeStringArgument()) layout.addRow("Realizations to load:", self._active_realizations_field) self._iterations_model = ValueModel(self.iteration_count) self._iterations_field = StringBox( self._iterations_model, "load_results_manually/iterations" ) self._iterations_field.setValidator(IntegerArgument()) layout.addRow("Iteration to load:", self._iterations_field) self.setLayout(layout) @property def iteration_count(self): """@rtype: int""" try: self.facade.run_path % (0, 0) except TypeError: return 0 iteration = 0 valid_directory = True while valid_directory: formatted = self.facade.run_path % (0, iteration + 1) valid_directory = os.path.exists(formatted) if valid_directory: iteration += 1 return iteration def readCurrentRunPath(self): current_case = self.facade.get_current_case_name() run_path = self.facade.run_path run_path = run_path.replace("<ERTCASE>", current_case) run_path = run_path.replace("<ERT-CASE>", current_case) return run_path def load(self): all_cases = self._case_model.getAllItems() selected_case = all_cases[self._case_combo.currentIndex()] realizations = self._active_realizations_model.getActiveRealizationsMask() iteration = self._iterations_model.getValue() try: if iteration is None: iteration = "" iteration = int(iteration) except ValueError as e: print( ( "Expected a (whole) number in iteration field, " f'got "{iteration}". Error message: {e}.' ) ) return False loaded = self.facade.load_from_forward_model( selected_case, realizations, iteration ) if loaded > 0: print(f"Successfully loaded {loaded} realisations.") else: print("No realisations loaded.") return loaded def setCurrectCase(self): current_case = self.facade.get_current_case_name() self._case_combo.setCurrentIndex(self._case_model.indexOf(current_case))