Esempio n. 1
0
        public static void ExtractRetentionTimes(this RawDataCollection rawData, IRawDataPlus rawFile)
        {
            if (rawData.Performed.Contains(Operations.RetentionTimes))
            {
                return;
            }
            if (!rawData.Performed.Contains(Operations.ScanIndex))
            {
                rawData.ExtractScanIndex(rawFile);
            }

            Log.Information("Extracting retention times");

            rawData.retentionTimes = new Dictionary <int, double>();
            IEnumerable <int> scans = rawData.scanIndex.ScanEnumerators[MSOrderType.Any];

            ProgressIndicator progress = new ProgressIndicator(scans.Count(), "Extracting retention times");

            foreach (int scan in scans)
            {
                try
                {
                    rawData.retentionTimes.Add(scan, rawFile.RetentionTimeFromScanNumber(scan));
                }
                catch (Exception e)
                {
                    Log.Error(e, "Failed during extraction of retention time for scan {Scan}", scan);
                    throw e;
                }
                progress.Update();
            }
            progress.Done();

            rawData.Performed.Add(Operations.RetentionTimes);
        }
Esempio n. 2
0
        public static void ExtractPrecursorScans(this RawDataCollection rawData, IRawDataPlus rawFile)
        {
            if (rawData.Performed.Contains(Operations.PrecursorScans))
            {
                return;
            }
            if (!rawData.Performed.Contains(Operations.ScanIndex))
            {
                rawData.ExtractScanIndex(rawFile);
            }

            Log.Information("Extracting scan dependents/precursor scans");

            int ms2Scan                = -1;
            int ms3Scan                = -1;
            IEnumerable <int> scans    = rawData.scanIndex.ScanEnumerators[MSOrderType.Ms];
            ProgressIndicator progress = new ProgressIndicator(scans.Count(), "Indexing linked scan events");

            foreach (int scan in scans)
            {
                var scanDependents = rawFile.GetScanDependents(scan, 4);

                // check if the ms1 scan has dependent scans
                if (scanDependents == null)
                {
                    continue;
                }

                for (int i = 0; i < scanDependents.ScanDependentDetailArray.Length; i++)
                {
                    if (rawData.scanIndex.AnalysisOrder == MSOrderType.Ms2) // it is ms2
                    {
                        ms2Scan = scanDependents.ScanDependentDetailArray[i].ScanIndex;
                        rawData.precursorScans.Add(ms2Scan, new PrecursorScanData(ms2scan: ms2Scan, masterScan: scan));
                    }
                    else // it is ms3
                    {
                        ms2Scan = scanDependents.ScanDependentDetailArray[i].ScanIndex;

                        if (rawFile.GetScanDependents(ms2Scan, 4).ScanDependentDetailArray.Length != 0) // make sure there is ms3 data
                        {
                            ms3Scan = rawFile.GetScanDependents(ms2Scan, 4).ScanDependentDetailArray[0].ScanIndex;
                            rawData.precursorScans.Add(ms2Scan, new PrecursorScanData(ms2scan: ms2Scan, masterScan: scan));
                            rawData.precursorScans.Add(ms3Scan, new PrecursorScanData(ms3scan: ms3Scan, ms2Scan: ms2Scan, masterScan: scan));
                        }
                        else
                        {
                            // there is no ms3 scan, so we only add the ms2 scan
                            rawData.precursorScans.Add(ms2Scan, new PrecursorScanData(ms2scan: ms2Scan, masterScan: scan));
                        }
                    }
                }
                progress.Update();
            }
            progress.Done();
            rawData.Performed.Add(Operations.PrecursorScans);
        }
Esempio n. 3
0
        public static void ExtractMethodData(this RawDataCollection rawData, IRawDataPlus rawFile)
        {
            if (rawData.Performed.Contains(Operations.MethodData))
            {
                return;
            }
            if (!rawData.Performed.Contains(Operations.ScanIndex))
            {
                rawData.ExtractScanIndex(rawFile);
            }

            Log.Information("Extracting method/instrument information");

            rawData.methodData = new Containers.MethodData();

            rawData.methodData.AnalysisOrder = rawData.scanIndex.AnalysisOrder;
            int firstQuantScan = rawData.scanIndex.ScanEnumerators[rawData.scanIndex.AnalysisOrder][0];

            rawData.methodData.QuantAnalyzer = rawData.scanIndex.allScans[firstQuantScan].MassAnalyzer;

            int firstMs1Scan = rawData.scanIndex.ScanEnumerators[MSOrderType.Ms][0];

            rawData.methodData.MassAnalyzers.Add(MSOrderType.Ms, rawData.scanIndex.allScans[firstMs1Scan].MassAnalyzer);

            int firstMs2Scan = rawData.scanIndex.ScanEnumerators[MSOrderType.Ms2][0];

            rawData.methodData.MassAnalyzers.Add(MSOrderType.Ms2, rawData.scanIndex.allScans[firstMs2Scan].MassAnalyzer);

            rawData.methodData.MSOrderEnumerator.Add(MSOrderType.Ms);
            rawData.methodData.MSOrderEnumerator.Add(MSOrderType.Ms2);

            int    n         = rawData.scanIndex.ScanEnumerators[MSOrderType.Ms2].Count();
            double ms2window = rawFile.GetScanEventForScanNumber(rawData.scanIndex.ScanEnumerators[MSOrderType.Ms2][n / 2]).GetIsolationWidth(0);

            if (rawData.methodData.AnalysisOrder == MSOrderType.Ms3)
            {
                int firstMs3Scan = rawData.scanIndex.ScanEnumerators[MSOrderType.Ms3][0];
                rawData.methodData.MassAnalyzers.Add(MSOrderType.Ms3, rawData.scanIndex.allScans[firstMs3Scan].MassAnalyzer);
                rawData.methodData.MSOrderEnumerator.Add(MSOrderType.Ms3);
                double ms3ms1window = rawFile.GetScanEventForScanNumber(firstMs3Scan).GetIsolationWidth(0);
                double ms3ms2window = rawFile.GetScanEventForScanNumber(firstMs3Scan).GetIsolationWidth(1);

                rawData.methodData.IsolationWindow = (MS2 : ms2window, (MS1Window : ms3ms1window, MS2Window : ms3ms2window));
            }
            else
            {
                rawData.methodData.IsolationWindow = (MS2 : ms2window, (MS1Window : -1, MS2Window : -1));
            }
            rawData.Performed.Add(Operations.MethodData);
        }
Esempio n. 4
0
        public static void Check(this RawDataCollection rawData, IRawDataPlus rawFile, List <Operations> operations)
        {
            if (operations.Contains(Operations.MethodData))
            {
                if (!rawData.Performed.Contains(Operations.MethodData))
                {
                    rawData.ExtractMethodData(rawFile);
                }
            }

            if (operations.Contains(Operations.PrecursorMasses))
            {
                if (!rawData.Performed.Contains(Operations.PrecursorMasses))
                {
                    rawData.ExtractPrecursorMasses(rawFile);
                }
            }

            if (operations.Contains(Operations.PrecursorScans))
            {
                if (!rawData.Performed.Contains(Operations.PrecursorScans))
                {
                    rawData.ExtractPrecursorScans(rawFile);
                }
            }

            if (operations.Contains(Operations.RetentionTimes))
            {
                if (!rawData.Performed.Contains(Operations.RetentionTimes))
                {
                    rawData.ExtractRetentionTimes(rawFile);
                }
            }

            if (operations.Contains(Operations.ScanIndex))
            {
                if (!rawData.Performed.Contains(Operations.ScanIndex))
                {
                    rawData.ExtractScanIndex(rawFile);
                }
            }

            if (operations.Contains(Operations.TrailerExtras))
            {
                if (!rawData.Performed.Contains(Operations.TrailerExtras))
                {
                    rawData.ExtractTrailerExtra(rawFile);
                }
            }

            if (operations.Contains(Operations.Ms1CentroidStreams))
            {
                if (!rawData.Performed.Contains(Operations.Ms1CentroidStreams))
                {
                    rawData.ExtractCentroidStreams(rawFile, MSOrder: MSOrderType.Ms);
                }
            }

            if (operations.Contains(Operations.Ms2CentroidStreams))
            {
                if (!rawData.Performed.Contains(Operations.Ms2CentroidStreams))
                {
                    rawData.ExtractCentroidStreams(rawFile, MSOrder: MSOrderType.Ms2);
                }
            }

            if (operations.Contains(Operations.Ms3CentroidStreams))
            {
                if (!rawData.Performed.Contains(Operations.Ms3CentroidStreams))
                {
                    rawData.ExtractCentroidStreams(rawFile, MSOrder: MSOrderType.Ms3);
                }
            }

            if (operations.Contains(Operations.Ms1SegmentedScans))
            {
                if (!rawData.Performed.Contains(Operations.Ms1SegmentedScans))
                {
                    rawData.ExtractSegmentScans(rawFile, MSOrder: MSOrderType.Ms);
                }
            }

            if (operations.Contains(Operations.Ms2SegmentedScans))
            {
                if (!rawData.Performed.Contains(Operations.Ms2SegmentedScans))
                {
                    rawData.ExtractSegmentScans(rawFile, MSOrder: MSOrderType.Ms2);
                }
            }

            if (operations.Contains(Operations.Ms3SegmentedScans))
            {
                if (!rawData.Performed.Contains(Operations.Ms3SegmentedScans))
                {
                    rawData.ExtractSegmentScans(rawFile, MSOrder: MSOrderType.Ms3);
                }
            }

            if (operations.Contains(Operations.MetaData))
            {
                if (!rawData.Performed.Contains(Operations.MetaData))
                {
                    rawData.metaData.AggregateMetaData(rawData, rawFile);
                }
            }

            if (operations.Contains(Operations.PeakRetAndInt))
            {
                if (!rawData.Performed.Contains(Operations.PeakRetAndInt))
                {
                    AnalyzePeaks.CalcPeakRetTimesAndInts(rawData, rawFile);
                }
            }

            if (operations.Contains(Operations.PeakShape))
            {
                if (!rawData.Performed.Contains(Operations.PeakShape))
                {
                    AnalyzePeaks.CalculatePeakShapes(rawData, rawFile);
                }
            }

            if (operations.Contains(Operations.PeakArea))
            {
                if (!rawData.Performed.Contains(Operations.PeakArea))
                {
                    AnalyzePeaks.QuantifyPrecursorPeaks(rawData, rawFile);
                }
            }
        }