/// <summary> /// Gets precursor scans directly from the trailer extra. This is intended for DIA files, and by extension only for Ms2 experiments. /// </summary> /// <param name="rawFile"></param> /// <param name="index"></param> /// <returns></returns> public static PrecursorScanCollection PrecursorScansByMasterScanMs2Only(IRawDataPlus rawFile, TrailerExtraCollection trailerExtras, ScanIndex index) { rawFile.SelectInstrument(Device.MS, 1); Log.Information("Extracting scan dependents/precursor scans"); PrecursorScanCollection precursorScans = new PrecursorScanCollection(); int ms2Scan = -1; int ms3Scan = -1; IEnumerable <int> scans = index.ScanEnumerators[MSOrderType.Ms]; ProgressIndicator progress = new ProgressIndicator(scans.Count(), "Indexing linked scan events"); // if it is DIA it must be MS2 scans = index.ScanEnumerators[MSOrderType.Ms2]; foreach (int scan in scans) { int masterScan = trailerExtras[scan].MasterScan; precursorScans[scan] = new PrecursorScanData(ms2scan: scan, masterScan: masterScan); } progress.Done(); return(precursorScans); }
DependentsAndPrecursorScansByScanDependents(IRawDataPlus rawFile, ScanIndex index) { rawFile.SelectInstrument(Device.MS, 1); Log.Information("Extracting scan dependents/precursor scans"); PrecursorScanCollection precursorScans = new PrecursorScanCollection(); ScanDependentsCollections dependents = new ScanDependentsCollections(); int ms2Scan = -1; int ms3Scan = -1; IEnumerable <int> scans = index.ScanEnumerators[MSOrderType.Ms]; ProgressIndicator progress = new ProgressIndicator(scans.Count(), "Indexing linked scan events"); foreach (int scan in scans) { var scanDependents = rawFile.GetScanDependents(scan, 4); dependents[scan] = scanDependents; // check if the ms1 scan has dependent scans if (scanDependents == null) { continue; } for (int i = 0; i < scanDependents.ScanDependentDetailArray.Length; i++) { if (index.AnalysisOrder == MSOrderType.Ms2) // it is ms2 { ms2Scan = scanDependents.ScanDependentDetailArray[i].ScanIndex; precursorScans[ms2Scan] = new PrecursorScanData(ms2scan: ms2Scan, masterScan: scan); } else // it is ms3 { ms2Scan = scanDependents.ScanDependentDetailArray[i].ScanIndex; var ms2Dependents = rawFile.GetScanDependents(ms2Scan, 4).ScanDependentDetailArray; if (ms2Dependents.Length != 0) // make sure there is ms3 data { ms3Scan = ms2Dependents[0].ScanIndex; precursorScans[ms2Scan] = new PrecursorScanData(ms2scan: ms2Scan, masterScan: scan); precursorScans[ms3Scan] = new PrecursorScanData(ms3scan: ms3Scan, ms2Scan: ms2Scan, masterScan: scan); } else { // there is no ms3 scan, so we only add the ms2 scan precursorScans[ms2Scan] = new PrecursorScanData(ms2scan: ms2Scan, masterScan: scan); } } } progress.Update(); } progress.Done(); return(precursorScans, dependents); }