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); }
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); }
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); }
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); } } }