public bool IndexMassSpectralPeaks(SpectraFileInfo fileInfo, bool silent, Dictionary <SpectraFileInfo, Ms1ScanInfo[]> _ms1Scans) { if (!silent) { Console.WriteLine("Reading spectra file"); } MsDataScan[] msDataScans = null; // read spectra file var ext = Path.GetExtension(fileInfo.FullFilePathWithExtension).ToUpperInvariant(); if (ext == ".MZML") { try { msDataScans = Mzml.LoadAllStaticData(fileInfo.FullFilePathWithExtension).GetAllScansList() .OrderBy(p => p.OneBasedScanNumber).ToArray(); } catch (FileNotFoundException) { if (!silent) { Console.WriteLine("\nCan't find .mzML file" + fileInfo.FullFilePathWithExtension + "\n"); } return(false); } catch (Exception e) { if (!silent) { Console.WriteLine("Problem opening .mzML file " + fileInfo.FullFilePathWithExtension + "; " + e.Message); } return(false); } for (int i = 0; i < msDataScans.Length; i++) { if (msDataScans[i].MsnOrder > 1) { msDataScans[i] = null; } } } else if (ext == ".RAW") { var tempList = new List <MsDataScan>(); ThermoDynamicData dynamicConnection = null; try { dynamicConnection = new ThermoDynamicData(fileInfo.FullFilePathWithExtension); // use thermo dynamic connection to get the ms1 scans and then dispose of the connection for (int i = 0; i < dynamicConnection.MsOrdersByScan.Length; i++) { if (dynamicConnection.MsOrdersByScan[i] == 1) { tempList.Add(dynamicConnection.GetOneBasedScanFromDynamicConnection(i + 1)); } else { tempList.Add(null); } } dynamicConnection.CloseDynamicConnection(); } catch (FileNotFoundException) { if (dynamicConnection != null) { dynamicConnection.CloseDynamicConnection(); } if (!silent) { Console.WriteLine("\nCan't find .raw file" + fileInfo.FullFilePathWithExtension + "\n"); } return(false); } catch (Exception e) { if (dynamicConnection != null) { dynamicConnection.CloseDynamicConnection(); } if (!silent) { throw new MzLibException("FlashLFQ Error: Problem opening .raw file " + fileInfo.FullFilePathWithExtension + "; " + e.Message); } } msDataScans = tempList.ToArray(); } else { if (!silent) { Console.WriteLine("Unsupported file type " + ext); return(false); } } if (!silent) { Console.WriteLine("Indexing MS1 peaks"); } if (!msDataScans.Any(p => p != null)) { _indexedPeaks = new List <IndexedMassSpectralPeak> [0]; return(false); } _indexedPeaks = new List <IndexedMassSpectralPeak> [(int)Math.Ceiling(msDataScans.Where(p => p != null && p.MassSpectrum.LastX != null).Max(p => p.MassSpectrum.LastX.Value) * BinsPerDalton) + 1]; int scanIndex = 0; List <Ms1ScanInfo> scanInfo = new List <Ms1ScanInfo>(); for (int i = 0; i < msDataScans.Length; i++) { if (msDataScans[i] == null) { continue; } scanInfo.Add(new Ms1ScanInfo(msDataScans[i].OneBasedScanNumber, scanIndex, msDataScans[i].RetentionTime)); for (int j = 0; j < msDataScans[i].MassSpectrum.XArray.Length; j++) { int roundedMz = (int)Math.Round(msDataScans[i].MassSpectrum.XArray[j] * BinsPerDalton, 0); if (_indexedPeaks[roundedMz] == null) { _indexedPeaks[roundedMz] = new List <IndexedMassSpectralPeak>(); } _indexedPeaks[roundedMz].Add(new IndexedMassSpectralPeak(msDataScans[i].MassSpectrum.XArray[j], msDataScans[i].MassSpectrum.YArray[j], scanIndex, msDataScans[i].RetentionTime)); } scanIndex++; } _ms1Scans.Add(fileInfo, scanInfo.ToArray()); if (_indexedPeaks == null || _indexedPeaks.Length == 0) { if (!silent) { Console.WriteLine("FlashLFQ Error: The file " + fileInfo.FilenameWithoutExtension + " contained no MS1 peaks!"); } return(false); } return(true); }