Exemplo n.º 1
0
        private void WriteDecon2LSScanFileEntry(
            StreamWriter writer,
            clsScanInfo currentScan,
            clsSpectraCache spectraCache)
        {
            int numPeaks;

            if (spectraCache == null)
            {
                numPeaks = 0;
            }
            else
            {
                if (!spectraCache.GetSpectrum(currentScan.ScanNumber, out var spectrum, true))
                {
                    SetLocalErrorCode(clsMASIC.eMasicErrorCodes.ErrorUncachingSpectrum);
                    return;
                }

                numPeaks = spectrum.IonCount;
            }

            var scanNumber = currentScan.ScanNumber;

            var msLevel = currentScan.FragScanInfo.MSLevel;

            if (msLevel < 1)
            {
                msLevel = 1;
            }

            var numIsotopicSignatures = 0;

            WriteDecon2LSScanFileEntry(writer, currentScan, scanNumber, msLevel, numPeaks, numIsotopicSignatures);
        }
Exemplo n.º 2
0
        private void SavePEKFileToDiskWork(
            TextWriter writer,
            clsScanInfo currentScan,
            clsSpectraCache spectraCache,
            string inputFileName,
            bool fragmentationScan,
            ref int spectrumExportCount)
        {
            var exportCount = 0;

            if (!spectraCache.GetSpectrum(currentScan.ScanNumber, out var spectrum, true))
            {
                SetLocalErrorCode(clsMASIC.eMasicErrorCodes.ErrorUncachingSpectrum);
                return;
            }

            spectrumExportCount += 1;

            writer.WriteLine("Time domain signal level:" + "\t" + currentScan.BasePeakIonIntensity.ToString("0.000")); // Store the base peak ion intensity as the time domain signal level value

            writer.WriteLine("MASIC " + mOptions.MASICVersion);                                                        // Software version
            var dataLine = "MS/MS-based PEK file";

            if (mOptions.RawDataExportOptions.IncludeMSMS)
            {
                dataLine += " (includes both survey scans and fragmentation spectra)";
            }
            else
            {
                dataLine += " (includes only survey scans)";
            }

            writer.WriteLine(dataLine);

            int scanNumber;

            if (mOptions.RawDataExportOptions.RenumberScans)
            {
                scanNumber = spectrumExportCount;
            }
            else
            {
                scanNumber = currentScan.ScanNumber;
            }

            dataLine = "Filename: " + inputFileName + "." + scanNumber.ToString("00000");
            writer.WriteLine(dataLine);

            if (fragmentationScan)
            {
                writer.WriteLine("ScanType: Fragmentation Scan");
            }
            else
            {
                writer.WriteLine("ScanType: Survey Scan");
            }

            writer.WriteLine("Charge state mass transform results:");
            writer.WriteLine("First CS,    Number of CS,   Abundance,   Mass,   Standard deviation");

            if (spectrum.IonCount > 0)
            {
                // Populate intensities and pointerArray()

                var intensities  = new double[spectrum.IonCount];
                var pointerArray = new int[spectrum.IonCount];
                for (var ionIndex = 0; ionIndex < spectrum.IonCount; ionIndex++)
                {
                    intensities[ionIndex]  = spectrum.IonsIntensity[ionIndex];
                    pointerArray[ionIndex] = ionIndex;
                }

                // Sort pointerArray() based on the intensities in intensities
                Array.Sort(intensities, pointerArray);

                int startIndex;

                if (mOptions.RawDataExportOptions.MaxIonCountPerScan > 0)
                {
                    // Possibly limit the number of ions to maxIonCount
                    startIndex = spectrum.IonCount - mOptions.RawDataExportOptions.MaxIonCountPerScan;
                    if (startIndex < 0)
                    {
                        startIndex = 0;
                    }
                }
                else
                {
                    startIndex = 0;
                }

                // Define the minimum data point intensity value
                var minimumIntensityCurrentScan = spectrum.IonsIntensity[pointerArray[startIndex]];

                // Update the minimum intensity if a higher minimum intensity is defined in .IntensityMinimum
                minimumIntensityCurrentScan = Math.Max(minimumIntensityCurrentScan, mOptions.RawDataExportOptions.IntensityMinimum);

                // If mOptions.RawDataExportOptions.MinimumSignalToNoiseRatio is > 0, then possibly update minimumIntensityCurrentScan
                if (mOptions.RawDataExportOptions.MinimumSignalToNoiseRatio > 0)
                {
                    minimumIntensityCurrentScan = Math.Max(minimumIntensityCurrentScan, currentScan.BaselineNoiseStats.NoiseLevel * mOptions.RawDataExportOptions.MinimumSignalToNoiseRatio);
                }

                exportCount = 0;
                for (var ionIndex = 0; ionIndex < spectrum.IonCount; ionIndex++)
                {
                    if (spectrum.IonsIntensity[ionIndex] >= minimumIntensityCurrentScan)
                    {
                        var dataLine1 =
                            "1" + "\t" +
                            "1" + "\t" +
                            spectrum.IonsIntensity[ionIndex] + "\t" +
                            spectrum.IonsMZ[ionIndex] + "\t" +
                            "0";

                        writer.WriteLine(dataLine1);
                        exportCount += 1;
                    }
                }
            }

            writer.WriteLine("Number of peaks in spectrum = " + spectrum.IonCount.ToString());
            writer.WriteLine("Number of isotopic distributions detected = " + exportCount.ToString());
            writer.WriteLine();
        }
Exemplo n.º 3
0
        private void SaveCSVFilesToDiskWork(
            StreamWriter dataWriter,
            StreamWriter scanInfoWriter,
            clsScanInfo currentScan,
            clsSpectraCache spectraCache,
            bool fragmentationScan,
            ref int spectrumExportCount)
        {
            int scanNumber;

            if (!spectraCache.GetSpectrum(currentScan.ScanNumber, out var spectrum, true))
            {
                SetLocalErrorCode(clsMASIC.eMasicErrorCodes.ErrorUncachingSpectrum);
                return;
            }

            spectrumExportCount += 1;

            // First, write an entry to the "_scans.csv" file

            if (mOptions.RawDataExportOptions.RenumberScans)
            {
                scanNumber = spectrumExportCount;
            }
            else
            {
                scanNumber = currentScan.ScanNumber;
            }

            int msLevel;

            if (fragmentationScan)
            {
                msLevel = currentScan.FragScanInfo.MSLevel;
            }
            else
            {
                msLevel = 1;
            }

            var numIsotopicSignatures = 0;
            var numPeaks = spectrum.IonCount;

            var baselineNoiseLevel = currentScan.BaselineNoiseStats.NoiseLevel;

            if (baselineNoiseLevel < 1)
            {
                baselineNoiseLevel = 1;
            }

            mBPIWriter.WriteDecon2LSScanFileEntry(scanInfoWriter, currentScan, scanNumber, msLevel, numPeaks, numIsotopicSignatures);

            // Now write an entry to the "_isos.csv" file

            if (spectrum.IonCount > 0)
            {
                // Populate intensities and pointerArray()

                var intensities  = new double[spectrum.IonCount];
                var pointerArray = new int[spectrum.IonCount];
                for (var ionIndex = 0; ionIndex < spectrum.IonCount; ionIndex++)
                {
                    intensities[ionIndex]  = spectrum.IonsIntensity[ionIndex];
                    pointerArray[ionIndex] = ionIndex;
                }

                // Sort pointerArray() based on the intensities in intensities
                Array.Sort(intensities, pointerArray);

                int startIndex;
                if (mOptions.RawDataExportOptions.MaxIonCountPerScan > 0)
                {
                    // Possibly limit the number of ions to maxIonCount
                    startIndex = spectrum.IonCount - mOptions.RawDataExportOptions.MaxIonCountPerScan;
                    if (startIndex < 0)
                    {
                        startIndex = 0;
                    }
                }
                else
                {
                    startIndex = 0;
                }

                // Define the minimum data point intensity value
                var minimumIntensityCurrentScan = spectrum.IonsIntensity[pointerArray[startIndex]];

                // Update the minimum intensity if a higher minimum intensity is defined in .IntensityMinimum
                minimumIntensityCurrentScan = Math.Max(minimumIntensityCurrentScan, mOptions.RawDataExportOptions.IntensityMinimum);

                // If mOptions.RawDataExportOptions.MinimumSignalToNoiseRatio is > 0, then possibly update minimumIntensityCurrentScan
                if (mOptions.RawDataExportOptions.MinimumSignalToNoiseRatio > 0)
                {
                    minimumIntensityCurrentScan = Math.Max(minimumIntensityCurrentScan, currentScan.BaselineNoiseStats.NoiseLevel * mOptions.RawDataExportOptions.MinimumSignalToNoiseRatio);
                }

                for (var ionIndex = 0; ionIndex < spectrum.IonCount; ionIndex++)
                {
                    if (spectrum.IonsIntensity[ionIndex] >= minimumIntensityCurrentScan)
                    {
                        var charge          = 1;
                        var isoFit          = 0;
                        var mass            = clsUtilities.ConvoluteMass(spectrum.IonsMZ[ionIndex], 1, 0);
                        var peakFWHM        = 0;
                        var signalToNoise   = spectrum.IonsIntensity[ionIndex] / baselineNoiseLevel;
                        var monoisotopicAbu = -10;
                        var monoPlus2Abu    = -10;

                        mBPIWriter.WriteDecon2LSIsosFileEntry(
                            dataWriter, scanNumber, charge,
                            spectrum.IonsIntensity[ionIndex], spectrum.IonsMZ[ionIndex],
                            isoFit, mass, mass, mass,
                            peakFWHM, signalToNoise, monoisotopicAbu, monoPlus2Abu);
                    }
                }
            }
        }