Example #1
0
        public GroupIdentifier GetGroupIdentifier(AnnotationCalculator annotationCalculator, ChromatogramSet chromatogramSet)
        {
            AnnotationDef annotationDef =
                annotationCalculator.SrmDocument.Settings.DataSettings.AnnotationDefs.FirstOrDefault(a => a.Name == ControlAnnotation);

            if (annotationDef == null)
            {
                return(default(GroupIdentifier));
            }
            return(GroupIdentifier.MakeGroupIdentifier(annotationCalculator.GetReplicateAnnotation(annotationDef, chromatogramSet)));
        }
Example #2
0
        /// <summary>
        /// Gets possible values for an annotation.
        /// </summary>
        public static IEnumerable <object> GetPossibleAnnotations(SrmDocument document, ReplicateValue replicateValue)
        {
            if (!document.Settings.HasResults || null == replicateValue)
            {
                return(new object[0]);
            }
            var annotationCalculator = new AnnotationCalculator(document);

            return(document.Settings.MeasuredResults.Chromatograms
                   .Select(chromSet => replicateValue.GetValue(annotationCalculator, chromSet)).Distinct()
                   .OrderBy(x => x, CollectionUtil.ColumnValueComparer));
        }
Example #3
0
        private static bool HasDistinctValues(AnnotationCalculator annotationCalculator, ReplicateValue replicateValue)
        {
            var settings = annotationCalculator.SrmDocument.Settings;

            if (!settings.HasResults)
            {
                return(false);
            }

            var values = settings.MeasuredResults.Chromatograms.Select(chromSet => replicateValue.GetValue(annotationCalculator, chromSet)).Distinct().ToArray();

            return(values.Length > 1);
        }
Example #4
0
        /// <summary>
        /// Gets replicate indices for a specific grouping annotation and value.
        /// </summary>
        public static int[] GetReplicateIndices(SrmDocument document, ReplicateValue group, object groupValue)
        {
            var defaultResult = Enumerable.Range(0, document.Settings.MeasuredResults.Chromatograms.Count).ToArray();

            if (group == null)
            {
                return(defaultResult);
            }

            var annotationCalculator = new AnnotationCalculator(document);

            return(defaultResult.Where(i => Equals(groupValue,
                                                   group.GetValue(annotationCalculator, document.Settings.MeasuredResults.Chromatograms[i]))).ToArray());
        }
Example #5
0
        public GroupComparer(GroupComparisonDef comparisonDef, SrmDocument document, QrFactorizationCache qrFactorizationCache)
        {
            SrmDocument   = document;
            ComparisonDef = comparisonDef;
            var annotationCalculator = new AnnotationCalculator(document);

            _qrFactorizationCache = qrFactorizationCache;
            List <KeyValuePair <int, ReplicateDetails> > replicateIndexes = new List <KeyValuePair <int, ReplicateDetails> >();
            var controlGroupIdentifier = ComparisonDef.GetControlGroupIdentifier(SrmDocument.Settings);

            if (SrmDocument.Settings.HasResults)
            {
                var chromatograms = SrmDocument.Settings.MeasuredResults.Chromatograms;
                for (int i = 0; i < chromatograms.Count; i++)
                {
                    var chromatogramSet = chromatograms[i];
                    ReplicateDetails replicateDetails = new ReplicateDetails()
                    {
                        GroupIdentifier = comparisonDef.GetGroupIdentifier(annotationCalculator, chromatogramSet)
                    };
                    if (Equals(controlGroupIdentifier, replicateDetails.GroupIdentifier))
                    {
                        replicateDetails.IsControl = true;
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(ComparisonDef.CaseValue))
                        {
                            var annotationValue = chromatogramSet.Annotations.GetAnnotation(ComparisonDef.ControlAnnotation);
                            if (!Equals(annotationValue, ComparisonDef.CaseValue))
                            {
                                continue;
                            }
                        }
                    }
                    if (null != ComparisonDef.IdentityAnnotation)
                    {
                        replicateDetails.BioReplicate =
                            chromatogramSet.Annotations.GetAnnotation(ComparisonDef.IdentityAnnotation);
                    }
                    replicateIndexes.Add(new KeyValuePair <int, ReplicateDetails>(i, replicateDetails));
                }
            }
            _replicateIndexes = ImmutableList.ValueOf(replicateIndexes);
            IsValid           = _replicateIndexes.Any(keyValuePair => keyValuePair.Value.IsControl) &&
                                _replicateIndexes.Any(keyValuePair => !keyValuePair.Value.IsControl);
        }
Example #6
0
        public static IEnumerable <ReplicateValue> GetGroupableReplicateValues(SrmDocument document)
        {
            var settings             = document.Settings;
            var annotationCalculator = new AnnotationCalculator(document);
            var withDistinctValues   = GetAllReplicateValues(settings)
                                       .Where(replicateValue => replicateValue is Annotation || HasDistinctValues(annotationCalculator, replicateValue)).ToArray();
            var lookupByTitle = withDistinctValues.ToLookup(replicateValue => replicateValue.Title);

            foreach (var replicateValue in withDistinctValues)
            {
                if (lookupByTitle[replicateValue.Title].Skip(1).Any())
                {
                    yield return(replicateValue.ChangeDisambiguateTitle(true));
                }
                else
                {
                    yield return(replicateValue);
                }
            }
        }
Example #7
0
        public static SrmDocument ApplyPeak(SrmDocument doc, PeptideTreeNode nodePepTree, ref TransitionGroupDocNode nodeTranGroup,
                                            int resultsIndex, ChromFileInfoId resultsFile, bool subsequent, ReplicateValue groupBy, object groupByValue, ILongWaitBroker longWaitBroker)
        {
            nodeTranGroup = nodeTranGroup ?? PickTransitionGroup(doc, nodePepTree, resultsIndex);
            GetReferenceData(doc, nodePepTree.DocNode, nodeTranGroup, resultsIndex, resultsFile, out var referenceTarget, out var referenceMatchData, out var runTime);

            var annotationCalculator = new AnnotationCalculator(doc);
            var chromatograms        = doc.Settings.MeasuredResults.Chromatograms;

            for (var i = 0; i < chromatograms.Count; i++)
            {
                var chromSet = chromatograms[i];

                if (groupBy != null)
                {
                    if (!Equals(groupByValue, groupBy.GetValue(annotationCalculator, chromSet)))
                    {
                        continue;
                    }
                }

                for (var j = 0; j < chromSet.MSDataFileInfos.Count; j++)
                {
                    var fileInfo = chromSet.MSDataFileInfos[j];
                    if ((i == resultsIndex && (resultsFile == null || ReferenceEquals(resultsFile, fileInfo.FileId))) ||
                        (subsequent && runTime != null && fileInfo.RunStartTime < runTime))
                    {
                        continue;
                    }

                    var bestMatch = GetPeakMatch(doc, chromSet, fileInfo, nodeTranGroup, referenceTarget, referenceMatchData);
                    if (bestMatch != null)
                    {
                        doc = bestMatch.ChangePeak(doc, nodePepTree, nodeTranGroup, chromSet.Name, fileInfo.FilePath);
                    }
                }
                longWaitBroker.SetProgressCheckCancel(i + 1, chromatograms.Count);
            }
            return(doc);
        }
            protected virtual IEnumerable <ReplicateGroup> GetReplicateGroups(IEnumerable <int> replicateIndexes)
            {
                if (_document.Settings.MeasuredResults == null)
                {
                    return(new ReplicateGroup[0]); // Likely user removed all results while Mass Errors window was open
                }

                var annotationCalculator = new AnnotationCalculator(_document);
                var chromatograms        = _document.Settings.MeasuredResults.Chromatograms;

                var result = new List <ReplicateGroup>();

                if (ReplicateGroupOp.GroupByValue == null)
                {
                    foreach (var index in replicateIndexes)
                    {
                        var chromatogram = _document.MeasuredResults.Chromatograms[index];
                        result.AddRange(chromatogram.MSDataFileInfos.Select(fileInfo => new ReplicateGroup(chromatogram.Name, ReplicateIndexSet.Singleton(index), fileInfo)));
                    }

                    var query = result.OrderBy(g => 0);
                    if (!string.IsNullOrEmpty(OrderByReplicateAnnotation))
                    {
                        var orderByReplicateValue = ReplicateValue.FromPersistedString(_document.Settings, OrderByReplicateAnnotation);
                        if (orderByReplicateValue != null)
                        {
                            query = result.OrderBy(
                                g => orderByReplicateValue.GetValue(annotationCalculator,
                                                                    chromatograms[g.ReplicateIndexes.First()]), CollectionUtil.ColumnValueComparer);
                        }
                    }

                    if (ReplicateOrder == SummaryReplicateOrder.document)
                    {
                        result = new List <ReplicateGroup>(query.ThenBy(g => g.ReplicateIndexes.ToArray(),
                                                                        Comparer <int[]> .Create((a, b) =>
                        {
                            for (var i = 0; i < Math.Min(a.Length, b.Length); ++i)
                            {
                                if (a[i] != b[i])
                                {
                                    return(a[i].CompareTo(b[i]));
                                }
                            }

                            return(a.Length.CompareTo(b.Length));
                        })).ThenBy(g => g.FileInfo.FileIndex));
                    }
                    else if (ReplicateOrder == SummaryReplicateOrder.time)
                    {
                        result = new List <ReplicateGroup>(query
                                                           .ThenBy(g => g.FileInfo.RunStartTime,
                                                                   Comparer <DateTime?> .Create(
                                                                       (a, b) => (a ?? DateTime.MaxValue).CompareTo(
                                                                           b ?? DateTime.MaxValue))).ThenBy(g => g.FileInfo.FileIndex).ToList());
                    }
                }
                else
                {
                    var lookup = replicateIndexes.ToLookup(replicateIndex =>
                                                           ReplicateGroupOp.GroupByValue.GetValue(annotationCalculator, chromatograms[replicateIndex]));
                    var keys = lookup.Select(grouping => grouping.Key).ToList();
                    if (keys.Count > 2)
                    {
                        // If there are more than 2 groups then exclude replicates with blank annotation values.
                        keys.Remove(null);
                    }

                    keys.Sort(CollectionUtil.ColumnValueComparer);
                    // ReSharper disable AssignNullToNotNullAttribute
                    foreach (var key in keys)
                    {
                        result.Add(new ReplicateGroup(key?.ToString() ?? string.Empty, ReplicateIndexSet.OfValues(lookup[key])));
                    }
                    // ReSharper restore AssignNullToNotNullAttribute
                }

                return(result.Distinct());
            }
Example #9
0
 public override object GetValue(AnnotationCalculator annotationCalculator, ChromatogramSet chromatogramSet)
 {
     return(annotationCalculator.GetReplicateAnnotation(AnnotationDef, chromatogramSet));
 }
Example #10
0
 public abstract object GetValue(AnnotationCalculator annotationCalculator, ChromatogramSet chromatogramSet);
Example #11
0
 public override object GetValue(AnnotationCalculator annotationCalculator, ChromatogramSet node)
 {
     return(_getValueFunc(node));
 }
Example #12
0
        private void comboAppliesTo_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboAppliesTo.SelectedIndex < 0)
            {
                availableFieldsTree1.RootColumn = NullRootColumn;
            }


            var annotationTargetItem = (AnnotationTargetItem)comboAppliesTo.Items[comboAppliesTo.SelectedIndex];

            AnnotationTargets = AnnotationDef.AnnotationTargetSet.Singleton(annotationTargetItem.AnnotationTarget);
            availableFieldsTree1.RootColumn = ColumnDescriptor.RootColumn(_dataSchema, AnnotationCalculator.RowTypeFromAnnotationTarget(annotationTargetItem.AnnotationTarget), UiModes.FromDocumentType(ModeUI));
        }