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 void PushCurrentOptimalResults(string title) { var or = new List <OptimalItem>(); foreach (var item in this.OptimalResults) { var newitem = new OptimalItem() { Condition = new OptimalResultCondition(item.Condition), Result = new OptimalResult(item.Result), Spectra = new List <IIdentifiedSpectrum>() }; or.Add(newitem); } this.SavedOptimalResults.Add(new Tuple <string, List <OptimalItem> >(title, or)); }