Example #1
0
        /// <summary>
        /// Called after OpenXMLFileDialog has closed successfully. Clears then populates PulseTree based on contents of chosen XML File.
        /// </summary>
        void OpenXMLFile()
        {
            XmlTextReader XMLFile = new XmlTextReader(openXMLFileDialog.FileName);

            List <TreeNode> NodeList = new List <TreeNode>();

            PulseTree.BeginUpdate();
            PulseTree.Nodes.Clear();

            while (XMLFile.Read())
            {
                if (XMLFile.NodeType == XmlNodeType.Element)
                {
                    if (XMLFile.Name.ToUpper() == "Pulse".ToUpper())
                    {
                        LaserState State = CreateStateFromXMLLine(XMLFile);
                        TreeNode   Node  = new TreeNode();
                        Node.Text = State.Name;
                        Node.Tag  = State;
                        NodeList.Add(Node);
                    }
                    else if (XMLFile.Name.ToUpper() == "Loop".ToUpper())
                    {
                        LoopState Loop = new LoopState();
                        while (XMLFile.MoveToNextAttribute())
                        {
                            if (XMLFile.Name.ToUpper() == "LoopCount".ToUpper())
                            {
                                Loop.LoopCount = System.Int32.Parse(XMLFile.Value);
                            }
                            else if (XMLFile.Name.ToUpper() == "Name".ToUpper())
                            {
                                Loop.Name = XMLFile.Value;
                            }
                            else if (XMLFile.Name.ToUpper() == "FPGALoop".ToUpper())
                            {
                                Loop.bIsFPGALoop = System.Boolean.Parse(XMLFile.Value);
                            }
                        }
                        TreeNode Node = ReadLoopIntoNode(new TreeNode(), XMLFile);

                        Node.Text  = Loop.Name;
                        Node.Text += " (Loop x" + Loop.LoopCount + ")";
                        Node.Tag   = Loop;
                        NodeList.Add(Node);
                    }
                }
            }
            PulseTree.Nodes.AddRange(NodeList.ToArray());
            PulseTree.CollapseAll();
            PulseTree.EndUpdate();
            XMLFile.Close();
        }
Example #2
0
        /// <summary>
        /// Called when an item is selected in the PulseTree. Updates other form elements with the Pulse data at the particular tree node.
        /// </summary>
        void PulseTreeSelect()
        {
            if (PulseTree.SelectedNode != null)
            {
                Pulse P = (Pulse)PulseTree.SelectedNode.Tag;
                NameBox.Text = P.Name;
                if (PulseTree.SelectedNode.Tag is LoopState)
                {
                    PulseTypeTabs.SelectedTab = LoopTabPage;
                    LoopNumberBox.Value       = ((LoopState)P).LoopCount;
                    FPGALoopSelect.Checked    = ((LoopState)P).bIsFPGALoop;
                }
                else
                {
                    PulseTypeTabs.SelectedTab = PulseTabPage;

                    LaserBox397B1.Checked    = ((LaserState)P).Laser397B1;
                    LaserBox397B2.Checked    = ((LaserState)P).Laser397B2;
                    LaserBox729.Checked      = ((LaserState)P).Laser729;
                    LaserBox854.Checked      = ((LaserState)P).Laser854;
                    LaserBox854POWER.Checked = ((LaserState)P).Laser854POWER;
                    LaserBox854FREQ.Checked  = ((LaserState)P).Laser854FREQ;
                    LaserBoxAux1.Checked     = ((LaserState)P).LaserAux1;
                    LaserBoxAux2.Checked     = ((LaserState)P).LaserAux2;
                    if (((LaserState)P).Laser729RF1 == true && ((LaserState)P).Laser729RF2 == true)
                    {
                        SourceSelect729.Value = 1;
                    }
                    else if (((LaserState)P).Laser729RF1 == false && ((LaserState)P).Laser729RF2 == true)
                    {
                        SourceSelect729.Value = 2;
                    }
                    else if (((LaserState)P).Laser729RF1 == true && ((LaserState)P).Laser729RF2 == false)
                    {
                        SourceSelect729.Value = 3;
                    }
                    else if (((LaserState)P).Laser729RF1 == false && ((LaserState)P).Laser729RF2 == false)
                    {
                        SourceSelect729.Value = 4;
                    }

                    //Update tick box to target length, and call tickRounder to update rounded length display
                    TicksBox.Value = ((LaserState)P).TargetLength;
                    tickRounder();

                    PulseTypeBox.SelectedIndex = (int)((LaserState)P).StateType;
                }
                PulseTree.Select(); //make sure that focus stays on PulseTree
            }
        }
Example #3
0
        private void CreateFromTemplateButton_Click(object sender, EventArgs e)
        {
            if (PulseTree.Nodes.Count == 0)
            {
                WriteMessage("Can't create pulse sequence: No laser states have been set", true);
                return;
            }

            RabiSelector myRabiSelector = new RabiSelector(PulseTree.Nodes);

            myRabiSelector.startExperimentButton.Enabled = false;
            myRabiSelector.ShowDialog();

            // If user did not press OK, don't do anything else in this method
            if (myRabiSelector.DialogResult != DialogResult.OK)
            {
                return;
            }

            // Create new treeview object to build new pulse tree into
            TreeView newPulseTree = new TreeView();

            // Grab sweep parameters from form
            int startLength = (int)myRabiSelector.startLengthSelect.Value;
            int stepSize    = (int)myRabiSelector.stepSizeSelect.Value;
            int steps       = (int)myRabiSelector.stepsSelect.Value;
            int repeats     = (int)myRabiSelector.repeatsSelect.Value;

            int pulseLength = new int();

            // Create the Rabi-type sequence using data from form
            LoopState[]  myLoopStates  = new LoopState[steps];
            TreeNode[]   myLoopNodes   = new TreeNode[steps];
            LaserState[] myLaserStates = new LaserState[steps];
            TreeNode[]   myLaserNodes  = new TreeNode[steps];

            // For each step
            for (int i = 0; i < steps; i++)
            {
                // Calculate pulse length
                pulseLength = startLength + i * stepSize;
                // Add a new loop with this pulse length
                addRabiLoop(newPulseTree, myLoopStates[i], myLoopNodes[i], myLaserStates[i], myLaserNodes[i], pulseLength, repeats);
            }

            // Create 'Stop Experiment' state
            LaserState stop = new LaserState();

            stop.Name      = "Stop Experiment";
            stop.StateType = LaserState.PulseType.STOP;
            // Add 'Stop Experiment' state as a node to new pulse tree
            TreeNode stopNode = newPulseTree.Nodes.Add(stop.Name);

            stopNode.Tag = stop;

            // Disable redrawing while we update
            PulseTree.BeginUpdate();
            // Clear old nodes from PulseTree
            PulseTree.Nodes.Clear();
            // Clone nodes from newPulseTree into main PulseTree control
            for (int i = 0; i < newPulseTree.Nodes.Count; i++)
            {
                PulseTree.Nodes.Add((TreeNode)newPulseTree.Nodes[i].Clone());
            }
            PulseTree.CollapseAll();
            PulseTree.EndUpdate();      // Re-enable redrawing
        }