public static void ExtractAll(this RawDataCollection rawData, IRawDataPlus rawFile) { Log.Information("Beginning extraction of all possible data"); rawFile.SelectInstrument(Device.MS, 1); rawData.ExtractPrecursorScans(rawFile); ProgressIndicator P = new ProgressIndicator(rawData.scanIndex.allScans.Count(), "Extracting raw data"); TrailerExtraIndices indices = new TrailerExtraIndices(rawFile); for (int i = 1; i <= rawData.scanIndex.allScans.Count(); i++) { try { // first get out the mass spectrum if (rawData.scanIndex.allScans[i].MassAnalyzer == MassAnalyzerType.MassAnalyzerFTMS) { rawData.centroidStreams.Add(i, new CentroidStreamData(rawFile.GetCentroidStream(i, false))); } else { rawData.segmentedScans.Add(i, new SegmentedScanData(rawFile.GetSegmentedScanFromScanNumber(i, null))); } // add the trailer extra data rawData.trailerExtras.Add(i, TrailerExtras.ExtractTrailerExtra(rawData, rawFile, i, indices)); rawData.Performed.Add(Operations.TrailerExtras); // add the retention time rawData.retentionTimes.Add(i, rawFile.RetentionTimeFromScanNumber(i)); rawData.Performed.Add(Operations.RetentionTimes); // add the precursor mass PrecursorMasses.ExtractPrecursorMasses(rawData, rawFile, i); rawData.Performed.Add(Operations.PrecursorMasses); P.Update(); } catch (Exception e) { Log.Error("Extraction failed on scan {Scan}", i); throw e; } } if (rawData.methodData.AnalysisOrder == MSOrderType.Ms2 | rawData.methodData.AnalysisOrder == MSOrderType.Ms3) { rawData.Performed.Add(Operations.Ms1CentroidStreams); if (rawData.methodData.MassAnalyzers[MSOrderType.Ms2] == MassAnalyzerType.MassAnalyzerFTMS) { rawData.Performed.Add(Operations.Ms2CentroidStreams); } else { rawData.Performed.Add(Operations.Ms2SegmentedScans); } } if (rawData.methodData.AnalysisOrder == MSOrderType.Ms3) { if (rawData.methodData.MassAnalyzers[MSOrderType.Ms3] == MassAnalyzerType.MassAnalyzerFTMS) { rawData.Performed.Add(Operations.Ms3CentroidStreams); } else { rawData.Performed.Add(Operations.Ms3SegmentedScans); } } P.Done(); }
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); } } }
public static void ExtractScanIndex(this RawDataCollection rawData, IRawDataPlus rawFile) { Log.Information("Extracting scan indices"); Dictionary <int, (MSOrderType MSOrder, MassAnalyzerType MassAnalyzer)> allScans; allScans = new Dictionary <int, (MSOrderType MSOrder, MassAnalyzerType MassAnalyzer)>(); MSOrderType AnalysisOrder; List <int> ms1 = new List <int>(); List <int> ms2 = new List <int>(); List <int> ms3 = new List <int>(); List <int> msAny = new List <int>(); // populate the scan indices IEnumerable <int> scans = rawFile.GetFilteredScanEnumerator(rawFile.GetFilterFromString("")); // get all scans foreach (int scan in scans) { IScanEvent scanEvent = rawFile.GetScanEventForScanNumber(scan); allScans.Add(scan, (scanEvent.MSOrder, scanEvent.MassAnalyzer)); msAny.Add(scan); if (allScans[scan].MSOrder == MSOrderType.Ms) { ms1.Add(scan); } if (allScans[scan].MSOrder == MSOrderType.Ms2) { ms2.Add(scan); } if (allScans[scan].MSOrder == MSOrderType.Ms3) { ms3.Add(scan); } } // determine the msorder of the experiment if ((ms1.Count > 0) & (ms2.Count == 0) & (ms3.Count == 0)) { AnalysisOrder = MSOrderType.Ms; } else { if ((ms1.Count > 0) & (ms2.Count > 0) & (ms3.Count == 0)) { AnalysisOrder = MSOrderType.Ms2; } else { AnalysisOrder = MSOrderType.Ms3; } } rawData.scanIndex = new ScanIndex(); rawData.scanIndex.allScans = allScans; rawData.scanIndex.AnalysisOrder = AnalysisOrder; rawData.scanIndex.ScanEnumerators.Add(MSOrderType.Any, msAny.ToArray()); rawData.scanIndex.ScanEnumerators.Add(MSOrderType.Ms, ms1.ToArray()); rawData.scanIndex.ScanEnumerators.Add(MSOrderType.Ms2, ms2.ToArray()); rawData.scanIndex.ScanEnumerators.Add(MSOrderType.Ms3, ms3.ToArray()); // we need to check if it is a boxcar file because those have some scan index issues bool isBoxCar = rawFile.GetScanEventForScanNumber(1).MassRangeCount > 1; rawData.Performed.Add(Operations.ScanIndex); if (isBoxCar) { Log.Information("Raw file looks like a boxcar run. Scan indices being adjusted to account for missing scan dependents."); rawData.ExtractPrecursorScans(rawFile); rawData.scanIndex.ScanEnumerators[rawData.scanIndex.AnalysisOrder] = rawData.precursorScans.Keys.ToArray(); } }