private IDictionary <int, Tuple <double, bool> > CalculateProteinAbundances() { var allTransitionIdentityPaths = new HashSet <IdentityPath>(); var quantifiers = Peptides.Select(peptide => peptide.GetPeptideQuantifier()).ToList(); int replicateCount = SrmDocument.Settings.HasResults ? SrmDocument.Settings.MeasuredResults.Chromatograms.Count : 0; var abundances = new Dictionary <int, Tuple <double, int> >(); var srmSettings = SrmDocument.Settings; bool allowMissingTransitions = srmSettings.PeptideSettings.Quantification.NormalizationMethod is NormalizationMethod.RatioToLabel; for (int iReplicate = 0; iReplicate < replicateCount; iReplicate++) { double totalNumerator = 0; double totalDenomicator = 0; int transitionCount = 0; foreach (var peptideQuantifier in quantifiers) { foreach (var entry in peptideQuantifier.GetTransitionIntensities(SrmDocument.Settings, iReplicate, false)) { totalNumerator += Math.Max(entry.Value.Intensity, 1.0); totalDenomicator += Math.Max(entry.Value.Denominator, 1.0); allTransitionIdentityPaths.Add(entry.Key); transitionCount++; } } if (transitionCount != 0) { var abundance = totalNumerator / totalDenomicator; abundances.Add(iReplicate, Tuple.Create(abundance, transitionCount)); } } var proteinAbundanceRecords = new Dictionary <int, Tuple <double, bool> >(); foreach (var entry in abundances) { bool incomplete; if (allowMissingTransitions) { incomplete = true; } else { incomplete = entry.Value.Item2 != allTransitionIdentityPaths.Count; } proteinAbundanceRecords.Add(entry.Key, Tuple.Create(entry.Value.Item1, incomplete)); } return(proteinAbundanceRecords); }