예제 #1
0
        private void DisplaySettings()
        {
            userInfoLabel.Content = "Hello!";
            autoPosStackPanel.IsEnabled = true;
            preSetStackPanel.IsEnabled = true;
            autoFeedGrid.IsEnabled = true;
            //statGrid.IsEnabled = true;
            logGrid.IsEnabled = true;
            add2LibButton.IsEnabled = true;

            // Refresh Pre-set Positions
            for (int i = 0; i < 4; i++)
            {
                if (currentOUS.preSetPosList.ContainsKey(i))
                {
                    PreSetPos psp = (PreSetPos)currentOUS.preSetPosList[i];
                    posButtons[i].Content = psp.posName;
                }
                else
                    posButtons[i].Content = "Position " + (i + 1);
            }

            // Refresh Position Library
            if (currentOUS.posLibrary == null)
                currentOUS.posLibrary = new ObservableCollection<LibPos>();

            RefreshCircles();
        }
예제 #2
0
        private void loaderNextButton_Click(object sender, RoutedEventArgs e)
        {
            if (allSets.basicParas.onArmLoader)
            {
                SerialSend(CalculateLoaderSteps(1) + "f");
            }
            else if (currentOUS.preSetPosList.ContainsKey(5))
            {
                PreSetPos     psp   = (PreSetPos)currentOUS.preSetPosList[5];
                ArenaPosition fPos  = psp.aPos;
                ArenaPosition fpPos = new ArenaPosition(fPos.X, fPos.Y, 0);

                if (currentAP.X == fpPos.X && currentAP.Y == fpPos.Y)
                {
                    Go2ArenaPos(fPos);
                    SerialSend(CalculateLoaderSteps(1) + "f");
                    Go2ArenaPos(fpPos);
                }
                else
                {
                    MessageBox.Show("Please move the arm to food grabbing position first.", "Not in Position",
                                    MessageBoxButton.OK, MessageBoxImage.Information);
                }
            }
        }
예제 #3
0
 private void preSetPosFoodButton_Click(object sender, RoutedEventArgs e)
 {
     if (currentOUS.preSetPosList.ContainsKey(5))
     {
         PreSetPos psp = (PreSetPos)currentOUS.preSetPosList[5];
         Go2ArenaPos(new ArenaPosition(psp.aPos.X, psp.aPos.Y, 0));
     }
 }
예제 #4
0
        // To Where User Determined in Pre-set Positions
        private void preSetPosButton_Click(object sender, RoutedEventArgs e)
        {
            Button b     = (Button)sender;
            int    index = Convert.ToInt32(b.Tag);

            if (currentOUS.preSetPosList.ContainsKey(index))
            {
                PreSetPos psp = (PreSetPos)currentOUS.preSetPosList[index];
                Go2ArenaPos(psp.aPos);
            }
        }
예제 #5
0
        // Circles in Arena
        private void RefreshCircles()
        {
            arenaGrid.Children.Clear();

            // Show Library Positions
            if (currentOUS.showLibPos && currentOUS.posLibrary != null)
            {
                foreach (LibPos lp in currentOUS.posLibrary)
                    if (lp.selected)
                        GetEllipse(new ArenaPosition(lp.X, lp.Y, lp.Z), Brushes.LightGray, "lib");
            }

            // Show Pre-set Positions
            if (currentOUS.showPreSet && currentOUS.preSetPosList != null)
            {
                for (int i = 1; i < 6; i++)
                {
                    if (currentOUS.preSetPosList.ContainsKey(i))
                    {
                        PreSetPos psp = (PreSetPos)currentOUS.preSetPosList[i];

                        if (psp.aPos == null)
                            psp.aPos = new ArenaPosition(allSets.basicParas.ArmLength, 0, 0);

                        SolidColorBrush b = Brushes.LightGray;
                        
                        switch (i)
                        {
                            case 4: b = Brushes.AliceBlue; break;
                            case 5: b = Brushes.Gold; break;
                        }

                        GetEllipse(psp.aPos, b, "PreSet");
                    }
                }
            }

            // Show the Origin
            if (currentOUS.showOrigin)
                GetEllipse(new ArenaPosition(allSets.basicParas.ArmLength, 0, 0), Brushes.YellowGreen, "origin");

            // Show Current Position
            GetEllipse(currentAP, Brushes.Tomato, "current");
        }
예제 #6
0
        private void Window_Loaded_1(object sender, RoutedEventArgs e)
        {
            posName.Add(pos1NameTextBox);
            posName.Add(pos2NameTextBox);
            posName.Add(pos3NameTextBox);
            posName.Add(pos4NameTextBox);

            posX.Add(pos1xTextBox);
            posX.Add(pos2xTextBox);
            posX.Add(pos3xTextBox);
            posX.Add(pos4xTextBox);
            posX.Add(pos5xTextBox);
            posX.Add(posFxTextBox);

            posY.Add(pos1yTextBox);
            posY.Add(pos2yTextBox);
            posY.Add(pos3yTextBox);
            posY.Add(pos4yTextBox);
            posY.Add(pos5yTextBox);
            posY.Add(posFyTextBox);

            posZ.Add(pos1zTextBox);
            posZ.Add(pos2zTextBox);
            posZ.Add(pos3zTextBox);
            posZ.Add(pos4zTextBox);
            posZ.Add(pos5zTextBox);
            posZ.Add(posFzTextBox);

            for (int i = 0; i < 6; i++)
            {
                if (preSets.ContainsKey(i))
                {
                    PreSetPos psp = (PreSetPos)preSets[i];
                    posX[i].Text = Convert.ToString(psp.aPos.X);
                    posY[i].Text = Convert.ToString(psp.aPos.Y);
                    posZ[i].Text = Convert.ToString(psp.aPos.Z);

                    if (i < 4)
                    {
                        posName[i].Text = psp.posName;
                    }
                }
            }
        }
예제 #7
0
        private void Save()
        {
            for (int i = 0; i < 6; i++)
            {
                string name = Convert.ToString(i);
                if (i < 4)
                {
                    name = posName[i].Text;
                }

                PreSetPos psp = new PreSetPos(name,
                                              Convert.ToDouble(posX[i].Text), Convert.ToDouble(posY[i].Text), Convert.ToDouble(posZ[i].Text));

                if (preSets.ContainsKey(i))
                {
                    preSets[i] = psp;
                }
                else
                {
                    preSets.Add(i, psp);
                }
            }
        }
예제 #8
0
        private void DoFeedCycle(ArenaPosition ap)
        {
            executed = false;

            currentTrialNum++;

            PreSetPos     foodPos    = (PreSetPos)currentOUS.preSetPosList[5];
            ArenaPosition preFoodPos = new ArenaPosition(allSets.basicParas.ArmLength, 0, 0);

            preFoodPos.L = foodPos.aPos.L;
            preFoodPos.H = foodPos.aPos.H;
            preFoodPos.R = foodPos.aPos.R;

            BehaviorRecord behaviorRecord = new BehaviorRecord(currentTrialNum, ap, foodPos.aPos);

            // Move to Food Loading Preparation Position
            InvokeGo2ArenaPos(preFoodPos);
            CheckExecuted();

            // Food Catching Position
            InvokeGo2ArenaPos(foodPos.aPos);
            CheckExecuted();

            // Get One New Food
            InvokeSerialSend(CalculateLoaderSteps(1) + "f");
            CheckExecuted();
            InvokeGo2ArenaPos(preFoodPos);
            CheckExecuted();

            // Waiting for Trial Begin Trigger
            if (currentOUS.behaviorParas.manualBegin)
            {
                // Note
                while (!triggered)
                {
                    Thread.Sleep(10);
                    CheckPoint();
                }
                // Remove Note
                triggered = false;
            }

            // Timing of Imaging Start
            if (currentOUS.behaviorParas.trigImg)
            {
                imgTimer = new Timer(InvokeSerialSend, "i", TimeSpan.FromMilliseconds(currentOUS.behaviorParas.imgDelay), TimeSpan.FromMilliseconds(-1));
            }

            // Move to Grabbing Position
            InvokeGo2ArenaPos(ap);
            CheckExecuted();
            InvokePrint("Trial Starts @ " + DateTime.Now.Minute + ":" + DateTime.Now.Second + ":" + DateTime.Now.Millisecond / 10);

            // Timing of Cue
            if (currentOUS.behaviorParas.manualCue)
            {
                // Note
                while (!triggered)
                {
                    Thread.Sleep(10);
                    CheckPoint();
                }
                // Remove Note
                triggered = false;
            }
            else
            {
                int    halfWindow    = (int)Math.Round(currentOUS.behaviorParas.cueWindow / 2);
                Random randGenerator = new Random();
                double randCueDelay  = currentOUS.behaviorParas.cueDelay + randGenerator.Next(-halfWindow, halfWindow);
                Thread.Sleep(TimeSpan.FromMilliseconds(randCueDelay));
            }
            MainWindow.MWInstance.Dispatcher.Invoke((ThreadStart) delegate
            {
                SendCue();
            });

            // Timing of Trial End
            if (currentOUS.behaviorParas.manualEnd)
            {
                // Note
                while (!triggered)
                {
                    Thread.Sleep(10);
                    CheckPoint();
                }
                // Remove Note
                triggered = false;
            }
            else
            {
                Thread.Sleep(TimeSpan.FromMilliseconds(currentOUS.behaviorParas.reachLimit));
            }
            InvokePrint("Trial Ends @ " + DateTime.Now.Minute + ":" + DateTime.Now.Second + ":" + DateTime.Now.Millisecond / 10);

            // Cancel Timers (Even when they exceed waiting time)
            try
            {
                imgTimer.Dispose();
            }
            catch (Exception) { }


            // Move to Food Loading Preparation Position
            InvokeGo2ArenaPos(preFoodPos);
            CheckExecuted();
            InvokeSerialSend("c");


            //logCurrentSession.behaviorList.Add(behaviorRecord);
        }