public void TestGetScanDataSumScans(string rawFileName, int scanStart, int scanEnd) { var expectedData = new Dictionary<string, Dictionary<int, Dictionary<string, string>>>(); // Keys in this dictionary are the start scan for summing var file1Data = new Dictionary<int, Dictionary<string, string>> { {1513, new Dictionary<string, string>()} }; // The KeySpec for each dictionary entry is MaxDataCount_Centroid file1Data[1513].Add("0_False", "1390 409.769 2.7E+5 1241.231 4.0E+5 + c ESI Full ms [400.00-2000.00]"); file1Data[1513].Add("0_True", "1390 409.769 2.7E+5 1241.231 4.0E+5 + c ESI Full ms [400.00-2000.00]"); file1Data[1513].Add("50_False", " 50 883.357 5.5E+6 1213.223 2.0E+6 + c ESI Full ms [400.00-2000.00]"); file1Data[1513].Add("50_True", " 50 883.357 5.5E+6 1213.223 2.0E+6 + c ESI Full ms [400.00-2000.00]"); expectedData.Add("Shew_246a_LCQa_15Oct04_Andro_0904-2_4-20", file1Data); var file2Data = new Dictionary<int, Dictionary<string, string>> { {16121, new Dictionary<string, string>()} }; // The KeySpec for each dictionary entry is MaxDataCount_Centroid file2Data[16121].Add("0_False", "26057 346.518 0.0E+0 753.312 8.7E+0 FTMS + p NSI Full ms [350.0000-1550.0000]"); file2Data[16121].Add("0_True", " 818 351.230 3.2E+5 820.778 2.3E+5 FTMS + p NSI Full ms [350.0000-1550.0000]"); file2Data[16121].Add("50_False", " 50 503.553 1.2E+7 521.201 1.6E+7 FTMS + p NSI Full ms [350.0000-1550.0000]"); file2Data[16121].Add("50_True", " 50 371.885 2.6E+7 650.717 9.8E+6 FTMS + p NSI Full ms [350.0000-1550.0000]"); expectedData.Add("HCC-38_ETciD_EThcD_4xdil_20uL_3hr_3_08Jan16_Pippin_15-08-53", file2Data); var dataFile = GetRawDataFile(rawFileName); using (var reader = new XRawFileIO(dataFile.FullName)) { Console.WriteLine("Scan data for {0}", dataFile.Name); Console.WriteLine("{0} {1,3} {2,8} {3,-8} {4,-8} {5,-8} {6,-8} {7,-8} {8}", "Scan", "Max#", "Centroid", "DataCount", "FirstMz", "FirstInt", "MidMz", "MidInt", "ScanFilter"); for (var iteration = 1; iteration <= 4; iteration++) { int maxNumberOfPeaks; bool centroidData; switch (iteration) { case 1: maxNumberOfPeaks = 0; centroidData = false; break; case 2: maxNumberOfPeaks = 0; centroidData = true; break; case 3: maxNumberOfPeaks = 50; centroidData = false; break; default: maxNumberOfPeaks = 50; centroidData = true; break; } double[,] massIntensityPairs; var dataPointsRead = reader.GetScanDataSumScans(scanStart, scanEnd, out massIntensityPairs, maxNumberOfPeaks, centroidData); Assert.IsTrue(dataPointsRead > 0, string.Format("GetScanDataSumScans returned 0 summing scans {0} to {1}", scanStart, scanEnd)); clsScanInfo scanInfo; var success = reader.GetScanInfo(scanStart, out scanInfo); Assert.IsTrue(success, "GetScanInfo returned false for scan {0}", scanStart); var lastIndex = massIntensityPairs.GetUpperBound(1); int dataCount; if (maxNumberOfPeaks > 0) { dataCount = maxNumberOfPeaks; // Make sure the 2D array has values of 0 for mass and intensity beyond index maxNumberOfPeaks for (var dataIndex = maxNumberOfPeaks; dataIndex < lastIndex; dataIndex++) { if (massIntensityPairs[0, dataIndex] > 0) { Console.WriteLine("Non-zero m/z value found at index {0} for scan {1}", dataIndex, scanStart); Assert.AreEqual(0, massIntensityPairs[0, dataIndex], "Non-zero m/z value found in 2D array beyond expected index"); } if (massIntensityPairs[1, dataIndex] > 0) { Console.WriteLine("Non-zero intensity value found at index {0} for scan {1}", dataIndex, scanStart); Assert.AreEqual(0, massIntensityPairs[1, dataIndex], "Non-zero intensity value found in 2D array beyond expected index"); } } } else { dataCount = lastIndex + 1; } Assert.AreEqual(dataPointsRead, dataCount, "Data count mismatch vs. function return value"); var midPoint = (int)(dataCount / 2f); var scanSummary = string.Format( "{0} {1,3} {2,8} {3,8} {4,8} {5,8} {6,8} {7,8} {8}", scanStart, maxNumberOfPeaks, centroidData, dataCount, massIntensityPairs[0, 0].ToString("0.000"), massIntensityPairs[1, 0].ToString("0.0E+0"), massIntensityPairs[0, midPoint].ToString("0.000"), massIntensityPairs[1, midPoint].ToString("0.0E+0"), scanInfo.FilterText); Dictionary<int, Dictionary<string, string>> expectedDataThisFile; if (!expectedData.TryGetValue(Path.GetFileNameWithoutExtension(dataFile.Name), out expectedDataThisFile)) { Assert.Fail("Dataset {0} not found in dictionary expectedData", dataFile.Name); } Dictionary<string, string> expectedDataByType; if (expectedDataThisFile.TryGetValue(scanStart, out expectedDataByType)) { var keySpec = maxNumberOfPeaks + "_" + centroidData; string expectedDataDetails; if (expectedDataByType.TryGetValue(keySpec, out expectedDataDetails)) { Assert.AreEqual(expectedDataDetails, scanSummary.Substring(22), "Scan details mismatch, scan " + scanStart + ", keySpec " + keySpec); } } Console.WriteLine(scanSummary); } } }
private static void TestReader(string rawFilePath, bool centroid = false, bool testSumming = false, int scanStart = 0, int scanEnd = 0) { try { if (!File.Exists(rawFilePath)) { Console.WriteLine("File not found, skipping: " + rawFilePath); return; } using (var oReader = new XRawFileIO(rawFilePath)) { foreach(var method in oReader.FileInfo.InstMethods) { Console.WriteLine(method); } var iNumScans = oReader.GetNumScans(); var strCollisionEnergies = string.Empty; ShowMethod(oReader); var scanStep = 1; if (scanStart < 1) scanStart = 1; if (scanEnd < 1) { scanEnd = iNumScans; scanStep = 21; } else { if (scanEnd < scanStart) { scanEnd = scanStart; } } for (var iScanNum = scanStart; iScanNum <= scanEnd; iScanNum += scanStep) { clsScanInfo oScanInfo; var bSuccess = oReader.GetScanInfo(iScanNum, out oScanInfo); if (bSuccess) { Console.Write("Scan " + iScanNum + " at " + oScanInfo.RetentionTime.ToString("0.00") + " minutes: " + oScanInfo.FilterText); var lstCollisionEnergies = oReader.GetCollisionEnergy(iScanNum); if (lstCollisionEnergies.Count == 0) { strCollisionEnergies = string.Empty; } else if (lstCollisionEnergies.Count >= 1) { strCollisionEnergies = lstCollisionEnergies[0].ToString("0.0"); if (lstCollisionEnergies.Count > 1) { for (var intIndex = 1; intIndex <= lstCollisionEnergies.Count - 1; intIndex++) { strCollisionEnergies += ", " + lstCollisionEnergies[intIndex].ToString("0.0"); } } } if (string.IsNullOrEmpty(strCollisionEnergies)) { Console.WriteLine(); } else { Console.WriteLine("; CE " + strCollisionEnergies); } string monoMZ; string chargeState; string isolationWidth; if (oScanInfo.TryGetScanEvent("Monoisotopic M/Z:", out monoMZ, false)) { Console.WriteLine("Monoisotopic M/Z: " + monoMZ); } if (oScanInfo.TryGetScanEvent("Charge State", out chargeState, true)) { Console.WriteLine("Charge State: " + chargeState); } if (oScanInfo.TryGetScanEvent("MS2 Isolation Width", out isolationWidth, true)) { Console.WriteLine("MS2 Isolation Width: " + isolationWidth); } if (iScanNum % 50 == 0 || scanEnd - scanStart <= 50) { // Get the data for scan iScanNum Console.WriteLine(); Console.WriteLine("Spectrum for scan " + iScanNum); double[] dblMzList; double[] dblIntensityList; var intDataCount = oReader.GetScanData(iScanNum, out dblMzList, out dblIntensityList, 0, centroid); var mzDisplayStepSize = 50; if (centroid) { mzDisplayStepSize = 1; } for (var iDataPoint = 0; iDataPoint <= dblMzList.Length - 1; iDataPoint += mzDisplayStepSize) { Console.WriteLine(" " + dblMzList[iDataPoint].ToString("0.000") + " mz " + dblIntensityList[iDataPoint].ToString("0")); } Console.WriteLine(); const int scansToSum = 15; if (iScanNum + scansToSum < iNumScans & testSumming) { // Get the data for scan iScanNum through iScanNum + 15 double[,] dblMassIntensityPairs; var dataCount = oReader.GetScanDataSumScans(iScanNum, iScanNum + scansToSum, out dblMassIntensityPairs, 0, centroid); Console.WriteLine("Summed spectrum, scans " + iScanNum + " through " + (iScanNum + scansToSum)); for (var iDataPoint = 0; iDataPoint <= dblMassIntensityPairs.GetLength(1) - 1; iDataPoint += 50) { Console.WriteLine(" " + dblMassIntensityPairs[0, iDataPoint].ToString("0.000") + " mz " + dblMassIntensityPairs[1, iDataPoint].ToString("0")); } Console.WriteLine(); } if (oScanInfo.IsFTMS) { udtFTLabelInfoType[] ftLabelData; var dataCount = oReader.GetScanLabelData(iScanNum, out ftLabelData); Console.WriteLine(); Console.WriteLine("{0,12}{1,12}{2,12}{3,12}{4,12}{5,12}", "Mass", "Intensity", "Resolution", "Baseline", "Noise", "Charge"); for (var iDataPoint = 0; iDataPoint <= dataCount - 1; iDataPoint += 50) { Console.WriteLine("{0,12}{1,12}{2,12}{3,12}{4,12}{5,12}", ftLabelData[iDataPoint].Mass.ToString("0.000"), ftLabelData[iDataPoint].Intensity.ToString("0"), ftLabelData[iDataPoint].Resolution.ToString("0"), ftLabelData[iDataPoint].Baseline.ToString("0.0"), ftLabelData[iDataPoint].Noise.ToString("0"), ftLabelData[iDataPoint].Charge.ToString("0")); } udtMassPrecisionInfoType[] ftPrecisionData; dataCount = oReader.GetScanPrecisionData(iScanNum, out ftPrecisionData); Console.WriteLine(); Console.WriteLine("{0,12}{1,12}{2,12}{3,12}{4,12}", "Mass", "Intensity", "AccuracyMMU", "AccuracyPPM", "Resolution"); for (var iDataPoint = 0; iDataPoint <= dataCount - 1; iDataPoint += 50) { Console.WriteLine("{0,12}{1,12}{2,12}{3,12}{4,12}", ftPrecisionData[iDataPoint].Mass.ToString("0.000"), ftPrecisionData[iDataPoint].Intensity.ToString("0"), ftPrecisionData[iDataPoint].AccuracyMMU.ToString("0.000"), ftPrecisionData[iDataPoint].AccuracyPPM.ToString("0.000"), ftPrecisionData[iDataPoint].Resolution.ToString("0")); } } } } } } } catch (Exception ex) { Console.WriteLine("Error in sub TestReader: " + ex.Message); } }