コード例 #1
0
ファイル: clsSICStatsWriter.cs プロジェクト: biobright/MASIC
        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));
        }
コード例 #2
0
ファイル: clsSICStatsWriter.cs プロジェクト: biobright/MASIC
        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);
        }