private void WriteSICStatsFlatFileEntry( TextWriter sicStatsWriter, char delimiter, clsSICOptions sicOptions, clsScanList scanList, clsParentIonInfo parentIon, int parentIonIndex, int surveyScanNumber, float surveyScanTime, int fragScanIndex, bool includeScanTimesInSICStatsFile) { var dataValues = new List <string>(40); float fragScanTime = 0; float optimalPeakApexScanTime = 0; dataValues.Add(sicOptions.DatasetID.ToString()); // Dataset ID dataValues.Add(parentIonIndex.ToString()); // Parent Ion Index dataValues.Add(StringUtilities.DblToString(parentIon.MZ, 4)); // MZ dataValues.Add(surveyScanNumber.ToString()); // Survey scan number double interferenceScore; if (fragScanIndex < scanList.FragScans.Count) { var fragScanNumber = scanList.FragScans[parentIon.FragScanIndices[fragScanIndex]].ScanNumber; dataValues.Add(fragScanNumber.ToString()); // Fragmentation scan number interferenceScore = scanList.FragScans[parentIon.FragScanIndices[fragScanIndex]].FragScanInfo.InterferenceScore; } else { dataValues.Add("0"); // Fragmentation scan does not exist interferenceScore = 0; } dataValues.Add(parentIon.OptimalPeakApexScanNumber.ToString()); // Optimal peak apex scan number if (includeScanTimesInSICStatsFile) { if (fragScanIndex < scanList.FragScans.Count) { fragScanTime = scanList.FragScans[parentIon.FragScanIndices[fragScanIndex]].ScanTime; } else { fragScanTime = 0; // Fragmentation scan does not exist } optimalPeakApexScanTime = ScanNumberToScanTime(scanList, parentIon.OptimalPeakApexScanNumber); } dataValues.Add(parentIon.PeakApexOverrideParentIonIndex.ToString()); // Parent Ion Index that supplied the optimal peak apex scan number if (parentIon.CustomSICPeak) { dataValues.Add("1"); // Custom SIC peak, record 1 } else { dataValues.Add("0"); // Not a Custom SIC peak, record 0 } var currentSIC = parentIon.SICStats; if (currentSIC.ScanTypeForPeakIndices == clsScanList.eScanTypeConstants.FragScan) { dataValues.Add(scanList.FragScans[currentSIC.PeakScanIndexStart].ScanNumber.ToString()); // Peak Scan Start dataValues.Add(scanList.FragScans[currentSIC.PeakScanIndexEnd].ScanNumber.ToString()); // Peak Scan End dataValues.Add(scanList.FragScans[currentSIC.PeakScanIndexMax].ScanNumber.ToString()); // Peak Scan Max Intensity } else { dataValues.Add(scanList.SurveyScans[currentSIC.PeakScanIndexStart].ScanNumber.ToString()); // Peak Scan Start dataValues.Add(scanList.SurveyScans[currentSIC.PeakScanIndexEnd].ScanNumber.ToString()); // Peak Scan End dataValues.Add(scanList.SurveyScans[currentSIC.PeakScanIndexMax].ScanNumber.ToString()); // Peak Scan Max Intensity } var currentPeak = currentSIC.Peak; dataValues.Add(StringUtilities.ValueToString(currentPeak.MaxIntensityValue, 5)); // Peak Intensity dataValues.Add(StringUtilities.ValueToString(currentPeak.SignalToNoiseRatio, 4)); // Peak signal to noise ratio dataValues.Add(currentPeak.FWHMScanWidth.ToString()); // Full width at half max (in scans) dataValues.Add(StringUtilities.ValueToString(currentPeak.Area, 5)); // Peak area dataValues.Add(StringUtilities.ValueToString(currentPeak.ParentIonIntensity, 5)); // Intensity of the parent ion (just before the fragmentation scan) dataValues.Add(StringUtilities.ValueToString(currentPeak.BaselineNoiseStats.NoiseLevel, 5)); dataValues.Add(StringUtilities.ValueToString(currentPeak.BaselineNoiseStats.NoiseStDev, 3)); dataValues.Add(currentPeak.BaselineNoiseStats.PointsUsed.ToString()); var statMoments = currentPeak.StatisticalMoments; dataValues.Add(StringUtilities.ValueToString(statMoments.Area, 5)); dataValues.Add(statMoments.CenterOfMassScan.ToString()); dataValues.Add(StringUtilities.ValueToString(statMoments.StDev, 3)); dataValues.Add(StringUtilities.ValueToString(statMoments.Skew, 4)); dataValues.Add(StringUtilities.ValueToString(statMoments.KSStat, 4)); dataValues.Add(statMoments.DataCountUsed.ToString()); dataValues.Add(StringUtilities.ValueToString(interferenceScore, 4)); // Interference Score if (includeScanTimesInSICStatsFile) { dataValues.Add(StringUtilities.DblToString(surveyScanTime, 5)); // SurveyScanTime dataValues.Add(StringUtilities.DblToString(fragScanTime, 5)); // FragScanTime dataValues.Add(StringUtilities.DblToString(optimalPeakApexScanTime, 5)); // OptimalPeakApexScanTime } sicStatsWriter.WriteLine(string.Join(delimiter.ToString(), dataValues)); }
private clsParentIonInfo GetFakeParentIonForFragScan(clsScanList scanList, int fragScanIndex) { var currentFragScan = scanList.FragScans[fragScanIndex]; var newParentIon = new clsParentIonInfo(currentFragScan.BasePeakIonMZ) { SurveyScanIndex = 0 }; // Find the previous MS1 scan that occurs before the frag scan var surveyScanNumberAbsolute = currentFragScan.ScanNumber - 1; newParentIon.FragScanIndices.Add(fragScanIndex); if (scanList.MasterScanOrderCount > 0) { var surveyScanIndexMatch = clsBinarySearch.BinarySearchFindNearest( scanList.MasterScanNumList, surveyScanNumberAbsolute, clsBinarySearch.eMissingDataModeConstants.ReturnClosestPoint); while (surveyScanIndexMatch >= 0 && scanList.MasterScanOrder[surveyScanIndexMatch].ScanType == clsScanList.eScanTypeConstants.FragScan) { surveyScanIndexMatch -= 1; } if (surveyScanIndexMatch < 0) { // Did not find the previous survey scan; find the next survey scan surveyScanIndexMatch += 1; while (surveyScanIndexMatch < scanList.MasterScanOrderCount && scanList.MasterScanOrder[surveyScanIndexMatch].ScanType == clsScanList.eScanTypeConstants.FragScan) { surveyScanIndexMatch += 1; } if (surveyScanIndexMatch >= scanList.MasterScanOrderCount) { surveyScanIndexMatch = 0; } } newParentIon.SurveyScanIndex = scanList.MasterScanOrder[surveyScanIndexMatch].ScanIndexPointer; } if (newParentIon.SurveyScanIndex < scanList.SurveyScans.Count) { newParentIon.OptimalPeakApexScanNumber = scanList.SurveyScans[newParentIon.SurveyScanIndex].ScanNumber; } else { newParentIon.OptimalPeakApexScanNumber = surveyScanNumberAbsolute; } newParentIon.PeakApexOverrideParentIonIndex = -1; newParentIon.SICStats.ScanTypeForPeakIndices = clsScanList.eScanTypeConstants.FragScan; newParentIon.SICStats.PeakScanIndexStart = fragScanIndex; newParentIon.SICStats.PeakScanIndexEnd = fragScanIndex; newParentIon.SICStats.PeakScanIndexMax = fragScanIndex; var peak = newParentIon.SICStats.Peak; peak.MaxIntensityValue = currentFragScan.BasePeakIonIntensity; peak.SignalToNoiseRatio = 1; peak.FWHMScanWidth = 1; peak.Area = currentFragScan.BasePeakIonIntensity; peak.ParentIonIntensity = currentFragScan.BasePeakIonIntensity; return(newParentIon); }