Beispiel #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();
        }
Beispiel #2
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
        }