// <match key="334452a46ee53694350e274530ae4b47" id1="334452a46ee53694" id2="350e274530ae4b47" name1="Ken Lassesen" name2="Ethelyn Hallberg" cm="26" fragments="2" /> private void ImportMatch() { var matches = dom.SelectNodes("//match"); foreach (XmlNode node in matches) { var id0 = node.Attributes["id1"].Value; var id1 = node.Attributes["id2"].Value; var person0 = Repository.FindPerson(id0); var person1 = Repository.FindPerson(id1); var geneticDistance = 0F; if(float.TryParse(node.Attributes["cm"].Value, out geneticDistance)) { var match = new Match {ChromosomeText = "0", Id0 = person0.Id, Id1=person1.Id, GeneticDistance = geneticDistance,MeAnd23 = true}; match.Save(); } } }
private void ParseTable(Personv2 p0, string table) { if (!table.Contains("Chromosome") || !table.Contains("Genetic distance")) return; string[] nameSep = { " vs. " }; string[] cmSep = { " cM" }; table = table.Replace(" ", ""); var dom = new System.Xml.XmlDocument(); try { dom.LoadXml(table); } catch (Exception exc) { MessageBox.Show(this, exc.Message + "\r\n" + table, "Parsing HTML error"); } var rows = dom.SelectNodes("//tr"); if (rows != null) foreach (XmlNode row in rows) { if (row.ChildNodes.Count == 6 && !String.IsNullOrWhiteSpace(row.ChildNodes[0].InnerText)) { var names = row.ChildNodes[0].InnerText.Split(nameSep, StringSplitOptions.RemoveEmptyEntries); if (names.Length > 1) try { var name = names[1].Trim(); var p1 = Repository.FindOrCreatePerson(name, name); if (p1 == null) { MessageBox.Show(this, name + " was not found -- please refetch you people", "23AndMe.com updated sharing"); } var chrom = row.ChildNodes[1].InnerText; var startAt = int.Parse(row.ChildNodes[2].InnerText); var endAt = int.Parse(row.ChildNodes[3].InnerText); var cM = float.Parse( row.ChildNodes[4].InnerText.Split(cmSep, StringSplitOptions.RemoveEmptyEntries)[0]); var snps = int.Parse(row.ChildNodes[5].InnerText); var match = new Match { ChromosomeText = chrom, EndPoint = endAt, StartPoint = startAt, GeneticDistance = cM, Id1 = p1.Id, Id0 = p0.Id, SNPs = snps, MeAnd23 = true }; match.Save(); } catch (Exception exc) { MessageBox.Show(this, exc.Message, "Unexpected Error"); } } } Repository.Write(); }
private void GetNumbers(Personv2 p0, string url, string[] idList) { try { Console.WriteLine(url); webBrowser1.Stop(); _browserDone = false; webBrowser1.AllowNavigation = true; webBrowser1.Navigate(url); while (webBrowser1.IsBusy || !_browserDone) { System.Threading.Thread.Sleep(100); Application.DoEvents(); if (!isRunning) return; } var waiting = true; while (waiting) { var dom = webBrowser1.Document.DomDocument as IHTMLDocument2; if (!isRunning) return; List<mshtml.IHTMLTable> allLi = dom .all.OfType<mshtml.IHTMLTable>() .ToList(); if (allLi.Count > 0) { foreach (IHTMLTable li in allLi) { var el = (IHTMLElement)li; ParseTable(p0, el.outerHTML); } waiting = false; } else { for (var i = 0; i < 100000; i++) { Application.DoEvents(); } } } } catch (Exception exc) { MessageBox.Show(this, exc.Message, "Unexpected Error"); } // For items with no data, create a NoMatch Record foreach (string meId in idList) { if (!string.IsNullOrWhiteSpace(meId)) { var p1 = Repository.FindPerson(meId); if (p1 != null) { if (!Repository.Match23AndMe(p0, p1)) { var dummy = new Match { Id0 = p0.Id, Id1 = p1.Id, Chromosome = -1, GeneticDistance = 0, MeAnd23 = true }; dummy.Save(); } } } } }
void ProcessChromosomeBrowser() { string[] commaSep = { "," }; for (var i = 1; i < data.Length; i++) { try { var cols = data[i].Split(commaSep, StringSplitOptions.None); var name0 = cols[0].Replace("\"", "").Trim(); var name1 = cols[1].Replace("\"", "").Trim(); var id0 = Repository.FindOrCreatePerson(name0,name0); id0.FamilyTreeId = name0; if(!id0.IsSaved) id0.Save(); var id1 = Repository.FindOrCreatePerson(name1,name1); id1.FamilyTreeId = name1; if (!id1.IsSaved) id1.Save(); var result = new Match { Id0 = id0.Id, Id1 = id1.Id }; if (cols[2].Equals("X")) { result.Chromosome = 27; } else if (cols[2].Equals("Y")) { result.Chromosome = 28; } else { result.Chromosome = int.Parse(cols[2]); } result.StartPoint = int.Parse(cols[3]); result.EndPoint = int.Parse(cols[4]); result.GeneticDistance = float.Parse(cols[5]); result.SNPs = int.Parse(cols[6]); result.FamilyTreeDna = true; result.Save(); } catch (Exception exc) { MessageBox.Show(exc.Message, "Unexpected Error"); } } }