/// <summary> /// Creates a new experiment folder, /// copy files to it from model dir. /// and marks it as loaded and selected in the project file /// </summary> public void CreateExperiment(Experiment.ExperimentData expData) { // get max experiment number int max = SysAdmin.GetMaxDirNumber(manager.GetRootExperimentPath(modelName)); ++max; // create new experiment folder string s = manager.GetLoadedExperimentAbsolutePath(modelName); string experimentPath = string.Format("{0}#{1}", s, max); if (max == 0) experimentPath = string.Format("{0}{1}#{2}", s, modelName, max); var di = Directory.CreateDirectory(string.Format("{0}\\{1}{2}", experimentPath, modelName, Model.MODEL_DIR_POSTFIX)); // copy main model folder to the new model folder s = manager.GetModelDir(modelName); SysAdmin.CopyDirectory(s, di.FullName); // create experiment data file in the experiment folder s = string.Format("{0}\\{1}{2}", experimentPath, modelName, Experiment.ExperimentData.EXPERIMENT_DATA_POSTFIX); expData.Save(s); // mark experiment as loaded manager.MarkExperimentAsLoaded(modelName, experimentPath); manager.MarkExperimentAsSelected(modelName, experimentPath); }
private CreateExperimentControl CreateCreateExperimentControl(Experiment.ExperimentData expData) { var ctrl = new CreateExperimentControl(); ctrl.DataContext = expData; //ctrl.tbkDuration.Text = duration.ToString(); ctrl.btnCreateExperimenet.Click += (sender_, e_) => { experimenter.CreateExperiment(expData); // refresh the model experiments tree Refresh(); ShadowMaker.ShadowDown(); }; ctrl.btnCancel.Click += (sender_, e_) => { Refresh(); ShadowMaker.ShadowDown(); }; return ctrl; }
public void LoadExperiment(Experiment exp) { LoadExperiment(exp.Path); }
public bool DeleteExperiment(Experiment exp) { bool result = false; exp.DeAnalyze(true); if (exp.IsRoot) result = manager.DeleteModel(modelName); else { string rootPath = manager.GetRootExperimentPath(modelName), expPath = exp.Path.Replace(rootPath, ""), loadedPath = manager.GetLoadedExperimentRelativePath(modelName), selectedPath = manager.GetSelectedExperimentRelativePath(modelName), parentPath = Path.GetDirectoryName(exp.Path); // loaded path -> if exp belongs to loaded path -> exp.parent if (loadedPath.Contains(expPath)) LoadExperiment(parentPath); // selected path -> exp.parent if (selectedPath.Contains(expPath)) { manager.MarkExperimentAsSelected(modelName, parentPath); } //exp.DeAnalyze(true); bool isDeleted = false; while (!isDeleted) { try { Directory.Delete(exp.Path, true); isDeleted = true; } catch (Exception ex) { isDeleted = !OnAttempt(ex.Message + "\nDo you want to try this action again?", false); } } result = true; } return result; }
public void SelectExperiment(Experiment exp) { manager.MarkExperimentAsSelected(modelName, exp.Path); }
private static void DrawTopDown(Experiment exp, Canvas canvas, Point point, int lvl) { if (exp.DescendantsCount > maxDescendantsCount) maxDescendantsCount = exp.DescendantsCount; var nodeCtrl = new NodeControl(); nodeCtrl.DataContext = exp; nodeCtrl.Counter = exp.ChildsCount; //if (!dict[node.Id].HasBackup || !dict[node.Id].HasSnapshot) nodeCtrl.Background = Brushes.LightPink; nodeCtrl.border.Background = GradientBraker.Brake(Colors.White, Colors.LightBlue, maxDescendantsCount + 1).ToArray()[exp.DescendantsCount]; nodeCtrl.IsSelected = exp.IsLoaded; canvas.Children.Add(nodeCtrl); Canvas.SetTop(nodeCtrl, point.Y); Canvas.SetLeft(nodeCtrl, point.X); Canvas.SetZIndex(nodeCtrl, 100); nodeCtrl.cbxAnalyze.IsChecked = exp.Data == null ? false : exp.Data.Alanyze; // calculate coordinates double trainLength = (exp.ChildsCount - 1) * horizontalGap; double startX = point.X - trainLength / 2; double startY = verticalGap * (lvl + 1); foreach (var chld in exp.ChildNodes) { if (chld.IsOpen) { DrawTopDown(chld, canvas, new Point(startX, startY), lvl + 1); } else { var nodeCtrl2 = new NodeControl(); nodeCtrl2.DataContext = chld; nodeCtrl2.Counter = chld.ChildsCount; //if (!dict[chld.Id].HasBackup || !dict[chld.Id].HasSnapshot) nodeCtrl2.Background = Brushes.LightPink; nodeCtrl2.IsSelected = chld.IsLoaded; nodeCtrl2.border.Background = GradientBraker.Brake(Colors.White, Colors.LightBlue, maxDescendantsCount + 1).ToArray()[chld.DescendantsCount]; canvas.Children.Add(nodeCtrl2); Canvas.SetTop(nodeCtrl2, startY); Canvas.SetLeft(nodeCtrl2, startX); Canvas.SetZIndex(nodeCtrl2, 100); nodeCtrl2.cbxAnalyze.IsChecked = chld.Data == null ? false : chld.Data.Alanyze; } var line = new Line(); if (!chld.IsLoaded) { line.Stroke = Brushes.Black; line.StrokeThickness = 0.3; line.StrokeDashArray = new DoubleCollection(new double[] { 35, 35 }); } else { line.Stroke = Brushes.Gold; line.StrokeThickness = 1.5; } //if (chld.IsOpen) line.StrokeThickness = 2; line.X1 = point.X + horizontalGap / 1.39; line.Y1 = point.Y + linesOffset / 2; line.X2 = startX + horizontalGap / 1.39; line.Y2 = startY + linesOffset / 2; canvas.Children.Add(line); Canvas.SetZIndex(line, 99); startX += horizontalGap; } }
public void AnalyzeExperiment(string modelName, Experiment exp) { if (Host.List.Count(ctrl => ctrl.ModelName == modelName && ctrl.ExperimentNumber == exp.Number) == 0) { string key = modelName + exp.Number.ToString(); if (!experimentsCache.ContainsKey(key)) { var ctrl = CreateModelControl(modelName, exp, true); var master = CreateModelControl(modelName, exp, false); ctrl.Clone = master; master.Clone = ctrl; experimentsCache[key] = ctrl; } //TODO [redundancy] replace isShadowUp with shadowMaker.isShadowUp bool isShadowUp = false; if (shadowMaker.Shadow == null) { shadowMaker.ShowThis(new LoadingControl("Loading...")); shadowMaker.ShadowUp(); isShadowUp = true; } var control = experimentsCache[key]; ThreadPool.QueueUserWorkItem(o => { aex.Protect(() => { // resource-intensive if (!control.HasNetwork) drNetwork(control); if (Host.AreCountersGlobalVisible) { if (!control.HasPoints) drPoints(control); if (!control.HasCounters) drCounters(control); } if (Host.AreTrTimesGlobalVisible) { if (!control.HasSections) drSections(control); if (!control.HasTravelTimes) drTrTimes(control); } control.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate() { if (Host.AreCountersGlobalVisible) { if (!control.IsMaster) control.Clone.OpenCountersGrid(); else control.OpenCountersGrid(); } if (Host.AreTrTimesGlobalVisible) { if (!control.IsMaster) control.Clone.OpenTrTimesGrid(); else control.OpenTrTimesGrid(); } Host.List.Add(control); if (isShadowUp) shadowMaker.ShadowDown(); })); }); }); } }
private ModelControl CreateModelControl(string modelName, Experiment exp, bool notMaster) { var ctrl = new ModelControl(modelName) { DataContext = exp, //TODO [redundancy] exp.Number ExperimentNumber = exp.Number, IsMaster = !notMaster, }; if (notMaster) ctrl.OptimizeForList(); ctrl.ModelDoubleClick += (sender_, e_) => Host.MoveAllModels((e_ as RoutedEventArgs<Point>).Value); return ctrl; }
/// <summary> /// Creating experiment tree from experiment directory :) /// </summary> /// <param name="rootPath">Absolute path to the root experiment folder</param> /// <param name="selectedPath">Relative (including root) path to the selected experiment</param> /// <param name="loadedPath">Relative (including root) path to the loaded experiment</param> public static Experiment Load(string rootPath, string selectedPath, string loadedPath) { var exp = new Experiment(); exp.Path = rootPath; var expDataFileName = Directory.GetFiles(rootPath, "*" + ExperimentData.EXPERIMENT_DATA_POSTFIX).FirstOrDefault(); if (!string.IsNullOrWhiteSpace(expDataFileName)) exp.Data = ExperimentData.Load(expDataFileName); exp.Number = SysAdmin.ExtractExperimentNumberFromPath(rootPath); string selectedRoot = SysAdmin.GetRootDirectory(selectedPath); exp.IsOpen = selectedRoot.EndsWith(string.Format(@"#{0}\", exp.Number)); string loadedRoot = SysAdmin.GetRootDirectory(loadedPath); exp.IsLoaded = loadedRoot.EndsWith(string.Format(@"#{0}\", exp.Number)); string s1 = (selectedPath.Contains(selectedRoot) && !string.IsNullOrWhiteSpace(selectedRoot)) ? selectedPath.Replace(selectedRoot, "") : string.Empty; string s2 = (loadedPath.Contains(loadedRoot) && !string.IsNullOrWhiteSpace(loadedRoot)) ? loadedPath.Replace(loadedRoot, "") : string.Empty; exp.BuildTree(rootPath, s1, s2); return exp; }