예제 #1
0
        private void BindExperimentalRun(ExperimentalRun experimentalRun)
        {
            var newThread = new Thread(CreateRunView);

            newThread.SetApartmentState(ApartmentState.STA);
            newThread.Start(experimentalRun);
        }
예제 #2
0
        private void CreateZoomTab(int cultureIndex, ExperimentalRun selectedExperimentalRun)
        {
            var displayItems = new List <int> {
                cultureIndex
            };

            CreateTab(displayItems, selectedExperimentalRun);
        }
예제 #3
0
 private static bool GetExperimentalRun(string fileFullPath, out ExperimentalRun expRun)
 {
     try
     {
         expRun = BioScreenHelper.ImportBioscreenFile(fileFullPath);
     }
     catch (Exception ex)
     {
         MessageBox.Show("Could not import the file: " + fileFullPath + "\r\nReason: " + ex.Message, "Import Errror", MessageBoxButton.OK, MessageBoxImage.Error);
         expRun = null;
         return(true);
     }
     return(false);
 }
예제 #4
0
        private static string GetSampelsName(List <int> displayItems, ExperimentalRun selectedExperimentalRun)
        {
            var wells = new StringBuilder();

            foreach (var displayItem in displayItems)
            {
                var culture = selectedExperimentalRun.Run[displayItem];
                BuildWellString(culture, ref wells);
            }
            wells.Remove(wells.Length - 1, 1);
            wells.Append(")");
            string sampelsName = "(" + wells.ToString();

            return(sampelsName);
        }
예제 #5
0
        private static ExperimentalRun CloneExperimentalRun(ExperimentalRun run)
        {
            var newExp = new ExperimentalRun(run.ImportFileName)
            {
                Name                  = run.Name,
                CreationDate          = run.CreationDate,
                ExperimentType        = run.ExperimentType,
                FileType              = run.FileType,
                ReferenceCultureIndex = run.ReferenceCultureIndex,
                ReplicateBehaviour    = run.ReplicateBehaviour,
                RunODRange            = run.RunODRange,
                RunTimeRange          = run.RunTimeRange
            };

            foreach (var culture in run.Run)
            {
                newExp.Run.Add(culture);
            }
            return(newExp);
        }
예제 #6
0
        public static ImageSource CreateChartImage(ExperimentalRun experimentalRun, int cultureIndex, List <DataType> validTypes, int height, int width, int padding, bool logged)
        {
            GrowthGraph growthGraph;
            var         fd = false;

            if (validTypes.Contains(DataType.FirstDerivative))
            {
                var culture          = experimentalRun.Run.FirstOrDefault(exp => exp.ContainerIndex == cultureIndex);
                var referenceCulture = experimentalRun.Run.FirstOrDefault(exp => exp.ContainerIndex == experimentalRun.ReferenceCultureIndex);
                growthGraph = AsGrowthGraph(culture, referenceCulture, validTypes);
                logged      = false;
                fd          = true;
            }
            else
            {
                growthGraph = AsGrowthGraph(experimentalRun, cultureIndex, validTypes);
            }

            return(CreateChartImage(growthGraph, height, width, padding, logged, fd));
        }
예제 #7
0
        public static GrowthGraph AsGrowthGraph(ExperimentalRun experimentalRun, int cultureIndex, List <DataType> validTypes)
        {
            Culture culture          = experimentalRun.Run.Where(exp => exp.ContainerIndex == cultureIndex).FirstOrDefault();
            Culture referenceCulture = null;

            if (experimentalRun.ReferenceCultureIndex != -1)
            {
                referenceCulture = experimentalRun.Run.Where(exp => exp.ContainerIndex == experimentalRun.ReferenceCultureIndex).FirstOrDefault();
            }

            if (culture != null)
            {
                var graph = new GrowthGraph(culture.Container);
                if (culture.GetType() == typeof(MergedCulture))
                {
                    CreateSeriesFromMergedCulture(((MergedCulture)culture), validTypes, ref graph);
                    if (referenceCulture != null)
                    {
                        CreateSeriesFromMergedCulture(((MergedCulture)culture), validTypes, ref graph);
                    }
                }
                else if (culture.GetType() == typeof(Culture))
                {
                    string serieName = GetSeriesName(culture.IsFaulty, culture.Container);
                    CreateSeriesFromCulture(culture.GrowthMeasurements, serieName, validTypes, ref graph);
                    if (referenceCulture != null)
                    {
                        CreateSeriesFromCulture(referenceCulture.GrowthMeasurements, serieName, validTypes, ref graph);
                    }
                }

                graph.ODRange   = new DoubleRange(experimentalRun.RunODRange.Min, experimentalRun.RunODRange.Max);
                graph.TimeRange = new DoubleRange(experimentalRun.RunTimeRange.Min, experimentalRun.RunTimeRange.Max);

                return(graph);
            }
            return(null);
        }
예제 #8
0
 public void AddJobs(ExperimentalRun run, RunMode? forcemode=null)
 {
     QJobs.Enqueue(run.ToDAQThread(forcemode));
     PropertyChanged(this, new PropertyChangedEventArgs("JobLeft"));
 }
예제 #9
0
        private void CreateTab(List <int> displayItems, ExperimentalRun selectedExperimentalRun)
        {
            var itemsTab = (TabControl)FindName("ViewTab");

            ResetHaveFocusOnAllTabs(itemsTab);

            var    cultureIndex = displayItems.First();
            string container    = displayItems.Count == 1 ? selectedExperimentalRun.Run[cultureIndex].Container : GetSampelsName(displayItems, selectedExperimentalRun);
            var    runName      = selectedExperimentalRun.ImportFileName;
            var    newTab       = new TabItem {
                Header = container + " @ " + runName
            };

            newTab.MouseUp += new MouseButtonEventHandler(TabItem_Click);

            var neuralParameters = new Macro.NeuralParameters
            {
                Iterations          = ProcessDataControl.iterations,
                LearningRate        = ProcessDataControl.learningRate,
                NeuronsInFirstLayer = ProcessDataControl.neuronsInFirstLayer,
                SigmoidAlphaValue   = ProcessDataControl.sigmoidAlphaValue
            };

            var graph = new zoomGraph
            {
                ExperimentalRun  = selectedExperimentalRun,
                NeuralParameters = neuralParameters
            };

            var zgcv = new ZoomGraphControlValues
            {
                DisplayRaw           = false,
                DisplayFD            = false,
                DisplayMetaLagData   = false,
                DisplayMetaRateData  = false,
                DisplayMetaYieldData = false,
                LogYAxis             = true,
                ChartBehaviour       = ChartBehaviour.Zoom,
                FitData          = false,
                EnableFit        = false,
                SkipPointsNumber = 0
            };

            ZoomGraphControlsControl.ControlValues = zgcv;
            graph.ZoomGraphControlValues           = zgcv;

            SetZoomGraphBindings(graph);

            graph.DisplayFirstDervivative = false;

            graph.HasFocus = true;

            graph.DisplayItems = displayItems;

            graph.SeriesCreated += new RoutedEventHandler(GraphSeries_Created);
            graph.NameChanged   += new RoutedEventHandler(NameChanged_Executed);

            var grid = new Grid();

            grid.RowDefinitions.Add(new RowDefinition {
                Height = GridLength.Auto
            });
            grid.RowDefinitions.Add(new RowDefinition());
            Grid.SetRow(graph, 1);
            grid.Children.Add(graph);

            newTab.Content = grid;

            if (itemsTab != null)
            {
                itemsTab.Items.Add(newTab);
                itemsTab.SelectedItem = newTab;
            }

            ActionsExpander.IsExpanded       = true;
            GraphControlsExpander.IsExpanded = true;
        }
예제 #10
0
 private void CreateZoomTab(List <int> displayItems, ExperimentalRun selectedExperimentalRun)
 {
     CreateTab(displayItems, selectedExperimentalRun);
 }
예제 #11
0
 private void ExperimentalRunList_SelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     _selectedRun           = (ExperimentalRun)ExperimentalRunList.SelectedItem;
     ckDisplayRaw.IsChecked = true;
     ProccessReplicates();
 }
예제 #12
0
 public void StartTestRun()
 {
     if (CurrentSetting != null)
     {
         ExperimentalRun run = new ExperimentalRun(mca, motor, thermometer, RunMode.Calibrate);
         //use our thing as data collector
         run.Log.Setting = CurrentSetting;
         run.Log.MCAData = this.MCAData;
         run.Log.MotorPosition = TargetPosition;
         run.Timeout = Timeout;
         run.MaxSample = MaxSample;
         App.ExperimentServer.AddJobs(run);
     }
     else
     {
         MessageBox.Show("Setting Not Selected.", "Setting Not Selected", MessageBoxButton.OK, MessageBoxImage.Error);
     }
 }
예제 #13
0
 public void StartSimulationRun()
 {
     ExperimentalRun run = new ExperimentalRun(mca, motor, thermometer, RunMode.Simulated);
     run.Log.MCAData = this.MCAData;
     App.ExperimentServer.AddJobs(run);
 }
예제 #14
0
        public static ExperimentalRun ImportBioscreenFile(string fileFullPath)
        {
            var reader       = ReadAsLines(fileFullPath);
            var experimenRun = new ExperimentalRun(Path.GetFileName(fileFullPath));

            if (reader == null)
            {
                throw new Exception("No Data");
            }

            var fileType = GetFileType(reader, fileFullPath);

            experimenRun.FileType = fileType;

            if (fileType == BioscreenFileType.Other)
            {
                throw new Exception("Invalid file extension");
            }

            experimenRun.Name         = GetRunName(reader, fileType);
            experimenRun.CreationDate = File.GetCreationTime(fileFullPath);

            var headers = GetHeaders(reader, fileType);
            var records = GetRecords(reader, fileType);

            var wells = GetWellQueue(headers, fileType);

            int counter = 0;

            foreach (var record in records)
            {
                counter += 1;
                if (string.IsNullOrEmpty(record.Trim()))
                {
                    continue;
                }

                var rowWellMeasurement = GetRowWellMeasurements(record, fileType);

                int time = GetTimeInSeconds(rowWellMeasurement[0], fileType);

                var rowToSkip = GetRowsToSkip(fileType);

                foreach (string item in rowWellMeasurement.Skip(rowToSkip))
                {
                    var well = wells.Dequeue();

                    if (item == string.Empty)
                    {
                        wells.Enqueue(well);
                        continue;
                    }

                    float od = GetOD(item);

                    if (od == 0)
                    {
                        wells.Enqueue(well);
                        continue;
                    }

                    if (experimenRun.Run.ElementAtOrDefault(well.Index - 1) != null)
                    {
                        var measurement = new GrowthMeasurement {
                            OD = od, Time = time
                        };
                        experimenRun.Run[well.Index - 1].GrowthMeasurements.GetMeasurements(DataType.Raw).Add(measurement);
                    }
                    else
                    {
                        var measurements = new List <GrowthMeasurement>();
                        var measurement  = new GrowthMeasurement {
                            OD = od, Time = time
                        };
                        measurements.Add(measurement);
                        experimenRun.Run.Add(new Culture(well.Index, well.Name, measurements));
                    }
                    wells.Enqueue(well);
                }
            }

            return(experimenRun);
        }
예제 #15
0
        public void FillExperimentalRuns(FillExperimentArgument arg = null)
        {
            if (arg == null) arg = new FillExperimentArgument();

            double[] positions = NP.Linspace(arg.StartPosition, arg.EndPosition, arg.NumPosition);
            foreach (double position in positions)
            {
                ExperimentalRun run = new ExperimentalRun(MCA, LinearMotor, Thermometer, RunMode.Experiment);
                run.Log.Setting = arg.Setting;
                run.Log.MotorPosition = position;
                run.MaxSample = arg.MaxSample;
                run.Timeout = arg.Timeout;
                //Debug.WriteLine(arg.Setting.Name);
                ExperimentalRuns.Add(run);
            }
        }