Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
 public void LoadExperiment(Experiment exp)
 {
     LoadExperiment(exp.Path);
 }
Exemplo n.º 4
0
        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;
        }
Exemplo n.º 5
0
 public void SelectExperiment(Experiment exp)
 {
     manager.MarkExperimentAsSelected(modelName, exp.Path);
 }
Exemplo n.º 6
0
        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;
            }
        }
Exemplo n.º 7
0
        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();
                            }));
                        });
                });
            }
        }
Exemplo n.º 8
0
        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;
        }
Exemplo n.º 9
0
        /// <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;
        }