private bool IsValidAlleleCombination(string alleles, InvestigationMode cmpType) { if (cmpType == InvestigationMode.Zygosity || cmpType == InvestigationMode.Genotype) { //For the zygosity and genotype comparison modes only accept two characters //separated by a slash. if (alleles.Length != 3) { return(false); } if (alleles.Substring(1, 1) != "/") { return(false); } } if (cmpType == InvestigationMode.Genotype) { //For the genotype comparison mode, also require A, C, G or T alleles. if (alleles.Substring(0, 1).ToUpper() != "A" && alleles.Substring(0, 1).ToUpper() != "C" && alleles.Substring(0, 1).ToUpper() != "G" && alleles.Substring(0, 1).ToUpper() != "T") { return(false); } if (alleles.Substring(2, 1).ToUpper() != "A" && alleles.Substring(2, 1).ToUpper() != "C" && alleles.Substring(2, 1).ToUpper() != "G" && alleles.Substring(2, 1).ToUpper() != "T") { return(false); } } return(true); }
public void Load(DataTable results, InvestigationMode cmpType) { string tempItem, tempExp, tempAlleles; GenotypeDictionary tempDuplFailures, tempGenotypeDict, tempDuplTestDict; GenotypeCollection tempNoResults; GenotypeResultCollection tempInvalidAlleles; MyTotalGenotypesCount = results.Rows.Count; //Initiate dictionaries and collections. tempGenotypeDict = new GenotypeDictionary(); tempDuplTestDict = new GenotypeDictionary(); tempDuplFailures = new GenotypeDictionary(); tempInvalidAlleles = new GenotypeResultCollection(); tempNoResults = new GenotypeCollection(); //First perform duplicate test. foreach (DataRow row in results.Rows) { //Read values. tempItem = row["Item"].ToString(); tempExp = row["Experiment"].ToString(); tempAlleles = row["Alleles"].ToString(); if (tempAlleles.ToUpper() != MyMissingValueCode.ToUpper()) { if (this.IsValidAlleleCombination(tempAlleles, cmpType)) { if (tempDuplTestDict.Contains(tempItem, tempExp)) { //This key already exists, check if the alleles are different. if (tempDuplTestDict[tempItem, tempExp].ToUpper() != tempAlleles.ToUpper()) { //Remember this key as having a duplicate failure. if (!tempDuplFailures.Contains(tempItem, tempExp)) { tempDuplFailures.Add(tempItem, tempExp, ""); } } } else { //Did not exist already. tempDuplTestDict.Add(tempItem, tempExp, tempAlleles); } } } } //Now go through the values again to avoid those with duplicate failures. foreach (DataRow row in results.Rows) { //Read values. tempItem = row["Item"].ToString(); tempExp = row["Experiment"].ToString(); tempAlleles = row["Alleles"].ToString(); if (tempAlleles.ToUpper() == MyMissingValueCode.ToUpper()) { //Skipped because of no result. tempNoResults.Add(tempItem, tempExp); } else if (!this.IsValidAlleleCombination(tempAlleles, cmpType)) { //Skipped because invalid alleles. tempInvalidAlleles.Add(tempItem, tempExp, tempAlleles); } else if (!tempDuplFailures.Contains(tempItem, tempExp) && !tempGenotypeDict.Contains(tempItem, tempExp)) { //Neither a duplicate failure nor already existing, go ahead and add. tempGenotypeDict.Add(tempItem, tempExp, tempAlleles); } } MyValidGenotypes = tempGenotypeDict; MyDuplFailures = tempDuplFailures; MyNoResults = tempNoResults; MyInvalidAlleles = tempInvalidAlleles; }