示例#1
0
        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);
        }
示例#2
0
        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;
        }