public ScoreDistribution ReadFromXml(XElement root) { var conds = (from c in root.Descendants("Condition") select c).ToList(); ScoreDistribution result = new ScoreDistribution(); foreach (var c in conds) { var key = new OptimalResultCondition( Convert.ToInt32(c.Element("PrecursorCharge").Value), Convert.ToInt32(c.Element("MissCleavageSiteCount").Value), 2, Convert.ToInt32(c.Element("ModificationCount").Value), c.Element("Classification").Value); var values = (from d in c.Element("Distribution").Descendants("Item") select new OptimalResult() { Score = MyConvert.ToDouble(d.Element("Score").Value), PeptideCountFromTargetDB = Convert.ToInt32(d.Element("Target").Value), PeptideCountFromDecoyDB = Convert.ToInt32(d.Element("Decoy").Value) } ).ToList(); result[key] = values; } return(result); }
public void Test() { ScoreDistribution s = new ScoreDistribution(); OptimalResultCondition or = new OptimalResultCondition(1, 1, 1, 1); s[or] = new List <OptimalResult>() { new OptimalResult(1.0, 1.0, 100, 10, 0.1), new OptimalResult(2.0, 1.0, 200, 10, 0.05), new OptimalResult(3.0, 1.0, 1000, 10, 0.01) }; ScoreDistribution subset = new ScoreDistribution(); subset[or] = new List <OptimalResult>() { new OptimalResult(2.0, 1.0, 100, 0, 0), new OptimalResult(3.0, 1.0, 900, 0, 0) }; IFalseDiscoveryRateCalculator calc = new TargetFalseDiscoveryRateCalculator(); double fdr = s.CalculateSubsetFdr(subset, calc); Assert.AreEqual(0.014, fdr); }
public List <OptimalItem> BuildSpectrumBin(IEnumerable <IIdentifiedSpectrum> peptides) { GetInteger chargeCalc = GetChargeCalculator(); GetInteger missCleavageCalc = GetMissCleavageCalculator(); IModificationCountCalculator modificationCalc = GetModificationCountCalculator(); GetInteger nptCalc = GetNumProteaseTerminiCalculator(); GetInteger proteinTagCalc = GetProteinTagCalculator(); Dictionary <OptimalResultCondition, OptimalItem> resultMap = new Dictionary <OptimalResultCondition, OptimalItem>(); foreach (IIdentifiedSpectrum mph in peptides) { int charge = chargeCalc(mph); int missCleavage = missCleavageCalc(mph); int modificationCount = modificationCalc.Calculate(mph.GetMatchSequence()); int nptCount = nptCalc(mph); int proteinTag = proteinTagCalc(mph); OptimalResultCondition cond = new OptimalResultCondition(charge, missCleavage, nptCount, modificationCount, mph.ClassificationTag); if (!resultMap.ContainsKey(cond)) { OptimalItem item = new OptimalItem(); item.Condition = cond; item.Spectra.Add(mph); resultMap[cond] = item; } else { resultMap[cond].Spectra.Add(mph); } } var result = resultMap.Values.ToList(); if (this.MinimumSpectraPerGroup > 1) { result.Sort((m1, m2) => m2.Spectra.Count.CompareTo(m1.Spectra.Count)); for (int i = result.Count - 1; i > 0; i--) { if (result[i].Spectra.Count < this.MinimumSpectraPerGroup) { result[i - 1].Spectra.AddRange(result[i].Spectra); result[i - 1].Condition.MergedConditions.Add(result[i].Condition); result.RemoveAt(i); } } } result.Sort((m1, m2) => m1.Condition.CompareTo(m2.Condition)); return(result); }
public int GetConditionSpectrumCount(OptimalResultCondition cond) { foreach (var oi in this.OptimalResults) { if (oi.Condition == cond) { return(oi.Spectra.Count); } } return(0); }
public void Test() { ScoreDistribution s = new ScoreDistribution(); OptimalResultCondition or = new OptimalResultCondition(1, 1, 1, 1); s[or] = new List<OptimalResult>(){ new OptimalResult(1.0, 1.0, 100,10,0.1), new OptimalResult(2.0, 1.0, 200,10,0.05), new OptimalResult(3.0, 1.0, 1000,10,0.01) }; ScoreDistribution subset = new ScoreDistribution(); subset[or] = new List<OptimalResult>(){ new OptimalResult(2.0, 1.0, 100,0,0), new OptimalResult(3.0, 1.0, 900,0,0) }; IFalseDiscoveryRateCalculator calc = new TargetFalseDiscoveryRateCalculator(); double fdr = s.CalculateSubsetFdr(subset, calc); Assert.AreEqual(0.014, fdr); }
public OptimalItem() { Condition = new OptimalResultCondition(-1, -1, -1, -1); Spectra = new List <IIdentifiedSpectrum>(); Result = new OptimalResult(); }
public OptimalItem GetConditionItem(OptimalResultCondition cond) { return(this.OptimalResults.Find(m => m.Condition == cond)); }