public static Relationship ConvertToSteps(Match match, List<Match> reference)
 {
     float cm = match.GeneticDistance;
     if (cm > 3600)
     {
         return ParentOrChild(match, reference);
     }
     if (cm >= 2800) return Relationship.Sibling;
     if (cm >= 1400)
     {
         switch(ParentOrChild(match, reference))
         {
             case Relationship.Parent:
                 return Relationship.GrandParent;
                 case Relationship.Child:
                 return Relationship.GrandChild;
             default:
                 return Relationship.Step2;
         }
     }
     if (cm >= 700) return Relationship.Step3;
     if (cm >= 350) return Relationship.Step4;
     if (cm >= 175) return Relationship.Step5;
     if (cm >= 87) return Relationship.Step6;
     if (cm >= 43) return Relationship.Step7;
     if (cm >= 22) return Relationship.Step8;
     if (cm >= 11) return Relationship.Step9;
     if (cm >= 5) return Relationship.Step10;
     if (cm > 0) return Relationship.Step11;
     return Relationship.Step12;
 }
 //  <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 static Relationship ParentOrChild(Match match, List<Match> reference)
 {
     var scope = new List<Guid> { match.Id0, match.Id1 };
     List<Guid> common = (from m in reference
                          where match.Id0 == m.Id0 || match.Id0 == m.Id1
                          select match.Id0 == m.Id0 ? m.Id1 : m.Id0).Intersect(
      (from m in reference
       where match.Id1 == m.Id0 || match.Id1 == m.Id1
       select match.Id1 == m.Id0 ? m.Id1 : m.Id0)).ToList();
     var sum0 = (from m in reference
                 where (match.Id0 == m.Id0 || match.Id0 == m.Id1)
                       && (common.Contains(m.Id0) || common.Contains(m.Id1))
                 select m.GeneticDistance).Sum();
     var sum1 = (from m in reference
                 where (match.Id1 == m.Id0 || match.Id1 == m.Id1)
                       && (common.Contains(m.Id0) || common.Contains(m.Id1))
                 select m.GeneticDistance).Sum();
     if (sum0 > sum1)
         return Relationship.Parent;
     if (sum0 < sum1)
         return Relationship.Child;
     return Relationship.Step1;
 }