/// <summary> /// Show the simulation setting dialog with the set ID. /// </summary> /// <param name="viewParamID">the simulation parameter ID.</param> private void ShowSetupSimulationDialog(string viewParamID) { Dictionary<string, SimulationParameterSet> sim = new Dictionary<string, SimulationParameterSet>(); foreach (string paramID in m_dManager.GetSimulationParameterIDs()) { SimulationParameterSet sps = new SimulationParameterSet(paramID); foreach (string modelID in m_dManager.GetModelList()) { PerModelSimulationParameter pmsp = new PerModelSimulationParameter(modelID); foreach (KeyValuePair<string, double> pair in m_dManager.GetInitialCondition(paramID, modelID)) { pmsp.InitialConditions.Add( KeyValuePairConverter<string, double>.Convert(pair)); } sps.PerModelSimulationParameters.Add(pmsp); } sps.LoggerPolicy = (LoggerPolicy)m_dManager.GetLoggerPolicy(paramID).Clone(); sim.Add(sps.Name, sps); } string currentParameterID = m_dManager.CurrentProject.Info.SimulationParam; SimulationConfigurationDialog win = new SimulationConfigurationDialog(this, sim.Values); if (viewParamID != null) win.ChangeParameterID(sim[viewParamID]); using (win) { List<string> delList = new List<string>(); DialogResult r = win.ShowDialog(); if (r != DialogResult.OK) return; foreach (SimulationParameterSet sps in sim.Values) { bool deleted = true; foreach (SimulationParameterSet newSps in win.Result) { if (newSps.Name == sps.Name) { deleted = false; break; } } if (deleted) { delList.Add(sps.Name); // m_dManager.DeleteSimulationParameter(sps.Name); } } try { foreach (SimulationParameterSet sps in win.Result) { if (!sim.ContainsKey(sps.Name)) m_dManager.CreateSimulationParameter(sps.Name); m_dManager.SetLoggerPolicy(sps.Name, sps.LoggerPolicy); List<EcellObject> steppers = new List<EcellObject>(); foreach (PerModelSimulationParameter pmsp in sps.PerModelSimulationParameters) { { Dictionary<string, double> pairs = new Dictionary<string, double>(pmsp.InitialConditions.Count); foreach (MutableKeyValuePair<string, double> pair in pmsp.InitialConditions) pairs.Add(pair.Key, pair.Value); if (sps.Name.Equals(Constants.defaultSimParam)) m_dManager.ImportSimulationParameter(pmsp.ModelID, sps.Name, pairs); else m_dManager.UpdateInitialCondition(sps.Name, pmsp.ModelID, pairs); } } foreach (String key in delList) { m_dManager.DeleteSimulationParameter(key); } m_env.PluginManager.ParameterUpdate( m_env.DataManager.CurrentProjectID, sps.Name); } if (!currentParameterID.Equals(win.CurrentParameterID)) m_env.DataManager.SetSimulationParameter(win.CurrentParameterID); } catch (Exception ex) { Util.ShowErrorDialog(ex.Message); } } }
/// <summary> /// The action of clicking new button in SimulationSetupWindow. /// </summary> /// <param name="sender">object(Button)</param> /// <param name="e">EventArgs</param> public void NewButtonClick(object sender, EventArgs e) { List<string> list = new List<string>(); foreach (SimulationParameterSet s in m_simParamSets) { list.Add(s.Name); } InputParameterNameDialog newwin = new InputParameterNameDialog(this); newwin.AlreadyList = list; using (newwin) { if (newwin.ShowDialog() != DialogResult.OK) return; SimulationParameterSet sps = new SimulationParameterSet(newwin.InputText); SimulationParameterSet sp = (SimulationParameterSet)m_simParamSets.Current; for (int i = 0; i < sp.PerModelSimulationParameters.Count; i++) { sps.PerModelSimulationParameters.Add(new PerModelSimulationParameter(sp.PerModelSimulationParameters[i])); } m_simParamSets.Add(sps); } }
/// <summary> /// Import the data of simulation parameter from the file. /// </summary> /// <param name="sender">Button</param> /// <param name="e">EventArgs</param> private void ImportSimulationParameterClicked(object sender, EventArgs e) { if (m_owner.DataManager.CurrentProject == null) return; SSOpenFileDialog.Filter = Constants.FilterCSVFile; SSOpenFileDialog.FileName = ""; if (SSOpenFileDialog.ShowDialog() == DialogResult.OK) { string parameterID = System.IO.Path.GetFileNameWithoutExtension(SSOpenFileDialog.FileName); if (parameterID.Equals(Constants.defaultSimParam)) { Util.ShowErrorDialog(MessageResources.ErrorImportDefault); return; } try { SimulationParameterSet sps = null; bool isHit = false; foreach (SimulationParameterSet s in m_simParamSets) { if (s.Name.Equals(parameterID)) { sps = s; isHit = true; } } if (isHit == false) { sps = new SimulationParameterSet(parameterID); SimulationParameterSet sp = (SimulationParameterSet)m_simParamSets.Current; for (int i = 0; i < sp.PerModelSimulationParameters.Count; i++) { sps.PerModelSimulationParameters.Add(new PerModelSimulationParameter(sp.PerModelSimulationParameters[i])); } m_simParamSets.Add(sps); } else { if (Util.ShowYesNoDialog(String.Format(MessageResources.ConfirmOverride, parameterID)) == false) return; } int index = m_simParamSets.IndexOf(sps); m_simParamSets.Position = index; foreach (KeyValuePair<string, double> pair in SimulationParameter.ConvertSimulationParameter(SSOpenFileDialog.FileName)) { PerModelSimulationParameter p = ((SimulationParameterSet)m_simParamSets.Current).PerModelSimulationParameters[0]; bool isHitParam = false; foreach (MutableKeyValuePair<string, double> delData in p.InitialConditions) { if (delData.Key.Equals(pair.Key)) { if (delData.Value == pair.Value) isHitParam = true; else p.InitialConditions.Remove(delData); break; } } string ptype, pkey, pname; Util.ParseFullPN(pair.Key, out ptype, out pkey, out pname); string modelID = m_owner.DataManager.CurrentProject.Model.ModelID; EcellObject pobj = m_owner.DataManager.GetEcellObject(modelID, pkey, ptype); if (pobj == null) { isHitParam = true; continue; } if (pobj.LocalID.Equals(EcellSystem.SIZE)) { isHitParam = true; continue; } EcellData pd = pobj.GetEcellData(pname); if (!pd.Settable || !pd.Value.IsDouble) { isHitParam = true; continue; } if (pair.Value == Convert.ToDouble(pd.Value.ToString())) { isHitParam = true; continue; } if (!isHitParam) { initialConditionsBindingSource.Add( KeyValuePairConverter<string, double>.Convert(pair)); } } initialParameters.Refresh(); } catch (Exception) { Util.ShowErrorDialog(String.Format(MessageResources.ErrImportSim, parameterID)); return; } Util.ShowNoticeDialog(String.Format(MessageResources.InfoImportSim, parameterID)); } }
/// <summary> /// Redraw simulation setup window on changing parameter ID. /// </summary> /// <param name="paramSet">parameter ID</param> public void ChangeParameterID(SimulationParameterSet paramSet) { m_simParamSets.CurrencyManager.Position = m_simParamSets.IndexOf(paramSet); }