//Put Parts and Sites into a list. Generate string of sequences
        private void GeneratePrimers_Click(object sender, RoutedEventArgs e)
        {
            if (pd1 != null)
            {
                sw1.SW_SV.Items.Remove(pd1);
                pd1 = null;
            }

            StackPanel activeTab = PD2_manual;
            if (PD2_buildTabs.SelectedIndex == 1) { activeTab = PD2_auto; }

            int i = 0;

            foreach (UIElement elem in activeTab.Children)
            {
                if (elem.GetType() == typeof(Part))
                {
                    //If list (i.e. L1 module) is full and there are still Parts left
                    //Create new list and increment index
                    if (partList.ElementAt(i).Count == 4)
                    {
                        partList.Add(new List<Part>());
                        i++;
                    }
                    int elemIndex = activeTab.Children.IndexOf(elem);
                    Part p = (Part)elem;
                    //p.updateSites(activeTab, elemIndex);
                    p.updateSites(activeTab);
                    Part clone = p.clone();
                    clone.BorderBrush = p.BorderBrush;
                    clone.ElementMenu.Items.Remove(clone.PD);
                    partList.ElementAt(i).Add(clone);

                }
            }

            pd1 = new PrimerDesigner1(partList);
            sw1.SW_SV.Items.Add(pd1);

            #region Old Generate Primers code
            //2D array of each Part and Site sequence, divided into arrays of Parts and flanking sites (i.e. Sites-Parts-Sites)

            //int n = activeTab.Children.Count / 3; //Number of Part-Sites sets, not including the two backbone Sites

            //_partSiteSets = new UIElement[n + 2][];

            //Sites firstFS = ((Sites)VisualTreeHelper.GetChild(activeTab, 0)).clone();
            //Sites lastFS = ((Sites)VisualTreeHelper.GetChild(activeTab, activeTab.Children.Count - 1)).clone();
            //_partSiteSets[0] = new UIElement[] { firstFS };
            //_partSiteSets[n + 1] = new UIElement[] { lastFS };

            //for (int i = 0; i < n; i++)
            //{
            //    int j = 3 * i + 1;
            //    Sites site1 = ((Sites)VisualTreeHelper.GetChild(activeTab, j)).clone();
            //    Part p0 = ((Part)VisualTreeHelper.GetChild(activeTab, j + 1));
            //    Part p = p0.clone();
            //    p.BorderBrush = p0.BorderBrush;
            //    p.ElementMenu.Items.Remove(p.PD);
            //    Sites site2 = ((Sites)VisualTreeHelper.GetChild(activeTab, j + 2)).clone();

            //    UIElement[] subArray = new UIElement[] { site1, p, site2 };
            //    _partSiteSets[i + 1] = subArray;
            //}

            ////Check that Sites are not used twice
            //List<String> sitesList = new List<String>();
            ////Build checklist by taking the left Site in each set besides the first, plus the last Site (technically the left Site of the vector)
            //for (int i = 2; i < _partSiteSets.Length; i++)
            //{
            //    sitesList.Add(((Sites)_partSiteSets[i][0]).Sequence);
            //}
            ////Check sitesList for duplicates
            //bool noDupes = true;
            //bool noEmpty = true;
            ////Start by checking sitesList for the first left-hand Site
            //String checkThis = ((Sites)_partSiteSets[1][0]).Sequence;
            ////Break when sitesList has no items left to compare to checkForThis
            //int count = sitesList.Count;
            //while (sitesList.Count() > 0 /*&& noDupes && noEmpty*/)
            //{
            //    noDupes = !(sitesList.Contains(checkThis));
            //    noEmpty = checkThis != "site";
            //    checkThis = sitesList.ElementAt(0);
            //    sitesList.RemoveAt(0);
            //}
            //if (noDupes && noEmpty)
            //{
            //    pd1 = new PrimerDesigner1(_partSiteSets);
            //    sw1.SW_SV.Items.Add(pd1);
            //}
            //else if (noEmpty && !noDupes)
            //{
            //    MessageBox.Show("Couldn't generate primers. Please check for duplicate fusion sites.");
            //}
            //else if (!noEmpty && noDupes)
            //{
            //    MessageBox.Show("Couldn't generate primers. Please check for empty fusion sites.");
            //}
            //else //Both errors present
            //{
            //    MessageBox.Show("Couldn't generate primers. Please check for duplicate and empty fusion sites.");
            //}
            #endregion
        }
        //Put Parts and Sites into a list. Generate string of sequences
        private void GeneratePrimers_Click(object sender, RoutedEventArgs e)
        {
            if (pd1 != null)
            {
                sw1.SW_SV.Items.Remove(pd1);
                pd1 = null;
            }

            StackPanel activeTab = PD2_manual;

            if (PD2_buildTabs.SelectedIndex == 1)
            {
                activeTab = PD2_auto;
            }

            int i = 0;

            foreach (UIElement elem in activeTab.Children)
            {
                if (elem.GetType() == typeof(Part))
                {
                    //If list (i.e. L1 module) is full and there are still Parts left
                    //Create new list and increment index
                    if (partList.ElementAt(i).Count == 4)
                    {
                        partList.Add(new List <Part>());
                        i++;
                    }
                    int  elemIndex = activeTab.Children.IndexOf(elem);
                    Part p         = (Part)elem;
                    //p.updateSites(activeTab, elemIndex);
                    p.updateSites(activeTab);
                    Part clone = p.clone();
                    clone.BorderBrush = p.BorderBrush;
                    clone.ElementMenu.Items.Remove(clone.PD);
                    partList.ElementAt(i).Add(clone);
                }
            }


            pd1 = new PrimerDesigner1(partList);
            sw1.SW_SV.Items.Add(pd1);

            #region Old Generate Primers code
            //2D array of each Part and Site sequence, divided into arrays of Parts and flanking sites (i.e. Sites-Parts-Sites)


            //int n = activeTab.Children.Count / 3; //Number of Part-Sites sets, not including the two backbone Sites

            //_partSiteSets = new UIElement[n + 2][];

            //Sites firstFS = ((Sites)VisualTreeHelper.GetChild(activeTab, 0)).clone();
            //Sites lastFS = ((Sites)VisualTreeHelper.GetChild(activeTab, activeTab.Children.Count - 1)).clone();
            //_partSiteSets[0] = new UIElement[] { firstFS };
            //_partSiteSets[n + 1] = new UIElement[] { lastFS };

            //for (int i = 0; i < n; i++)
            //{
            //    int j = 3 * i + 1;
            //    Sites site1 = ((Sites)VisualTreeHelper.GetChild(activeTab, j)).clone();
            //    Part p0 = ((Part)VisualTreeHelper.GetChild(activeTab, j + 1));
            //    Part p = p0.clone();
            //    p.BorderBrush = p0.BorderBrush;
            //    p.ElementMenu.Items.Remove(p.PD);
            //    Sites site2 = ((Sites)VisualTreeHelper.GetChild(activeTab, j + 2)).clone();

            //    UIElement[] subArray = new UIElement[] { site1, p, site2 };
            //    _partSiteSets[i + 1] = subArray;
            //}

            ////Check that Sites are not used twice
            //List<String> sitesList = new List<String>();
            ////Build checklist by taking the left Site in each set besides the first, plus the last Site (technically the left Site of the vector)
            //for (int i = 2; i < _partSiteSets.Length; i++)
            //{
            //    sitesList.Add(((Sites)_partSiteSets[i][0]).Sequence);
            //}
            ////Check sitesList for duplicates
            //bool noDupes = true;
            //bool noEmpty = true;
            ////Start by checking sitesList for the first left-hand Site
            //String checkThis = ((Sites)_partSiteSets[1][0]).Sequence;
            ////Break when sitesList has no items left to compare to checkForThis
            //int count = sitesList.Count;
            //while (sitesList.Count() > 0 /*&& noDupes && noEmpty*/)
            //{
            //    noDupes = !(sitesList.Contains(checkThis));
            //    noEmpty = checkThis != "site";
            //    checkThis = sitesList.ElementAt(0);
            //    sitesList.RemoveAt(0);
            //}
            //if (noDupes && noEmpty)
            //{
            //    pd1 = new PrimerDesigner1(_partSiteSets);
            //    sw1.SW_SV.Items.Add(pd1);
            //}
            //else if (noEmpty && !noDupes)
            //{
            //    MessageBox.Show("Couldn't generate primers. Please check for duplicate fusion sites.");
            //}
            //else if (!noEmpty && noDupes)
            //{
            //    MessageBox.Show("Couldn't generate primers. Please check for empty fusion sites.");
            //}
            //else //Both errors present
            //{
            //    MessageBox.Show("Couldn't generate primers. Please check for duplicate and empty fusion sites.");
            //}
            #endregion
        }