Beispiel #1
0
 public void SetRawFile(MSDataFile dataFile)
 {
     MsnDataScan scan = dataFile[ScanNumber] as MsnDataScan;
     IsolationMZ = scan.IsolationRange.Mean;
     Spectrum = dataFile.GetReadOnlyMZSpectrum(ScanNumber, true);
     ScanWidth = scan.MzRange.Width;
 }
Beispiel #2
0
        private void ProcessFile(string msDataFile, bool includeLog = false, bool groupByFragmentation = true)
        {
            IXRawfile5 raw = null;
            StreamWriter log = null;
            Dictionary<string, StreamWriter> txt_outputs = null;
            Dictionary<string, StreamWriter> mgf_outputs = null;

            StringBuilder sb = new StringBuilder();

            string filepath = msDataFile;
            onStartingFile(new FilepathEventArgs(filepath));

            txt_outputs = new Dictionary<string, StreamWriter>();
            mgf_outputs = new Dictionary<string, StreamWriter>();
            var spectrum_counts = new SortedDictionary<string, int>();
            var dta_counts = new SortedDictionary<string, int>();
            var retention_times = new SortedDictionary<int, double>();
            var scan_filter_mzs = new SortedDictionary<int, double>();
            var precursor_mzs = new SortedDictionary<int, double>();
            var precursor_intensities = new SortedDictionary<int, double>();
            var precursor_denormalized_intensities = new SortedDictionary<int, double>();
            var precursor_charge_states = new SortedDictionary<int, int>();
            var precursor_fragmentation_methods = new SortedDictionary<int, string>();
            var elapsed_scan_times = new SortedDictionary<int, double>();
            var ion_injection_times = new SortedDictionary<int, double>();
            var precursor_sns = new SortedDictionary<int, double?>();
            var precursor_peak_depths = new SortedDictionary<int, int>();

            //raw = (IXRawfile2)new XRawfile();
            raw = (IXRawfile5)new MSFileReader_XRawfile();
            raw.Open(filepath);
            raw.SetCurrentController(0, 1);

            if (includeLog)
            {
                log =
                    new StreamWriter(Path.Combine(LogFolder,
                        Path.GetFileNameWithoutExtension(filepath) + "_log.txt"));
                log.AutoFlush = true;

                log.WriteLine("DTA Generator PARAMETERS");
                log.WriteLine("Assumed Precursor Charge State Range: " + minimumAssumedPrecursorChargeState + '-' +
                              maximumAssumedPrecursorChargeState);
                log.WriteLine("Clean Precursor: " + cleanPrecursor);
                log.WriteLine("Enable ETD Pre-Processing: " + enableEtdPreProcessing);
                log.WriteLine("Clean TMT Duplex: " + cleanTmtDuplex);
                log.WriteLine("Clean iTRAQ 4-Plex: " + cleanItraq4Plex);
                log.WriteLine("Clean TMT 6-Plex: " + cleanTmt6Plex);
                log.WriteLine("Clean iTRAQ 8-Plex: " + cleanItraq8Plex);
                log.WriteLine();
            }

            int first_scan_number = -1;
            raw.GetFirstSpectrumNumber(ref first_scan_number);
            int last_scan_number = -1;
            raw.GetLastSpectrumNumber(ref last_scan_number);

            int maxCounter = last_scan_number / 1000;
            int counter = 0;

            // DJB Addition, Check all the scans first to see if they are a precursor scan or not
            var msScans = new bool[last_scan_number + 1];

            var dta_content_sb = new StringBuilder();

            var mgf_content_sb = new StringBuilder();

            for (int scanNumber = first_scan_number; scanNumber <= last_scan_number; scanNumber++)
            {
                int msn = 0;
                raw.GetMSOrderForScanNum(scanNumber, ref msn);

                if (counter > maxCounter)
                {
                    onUpdateProgress();
                    counter = 0;
                }
                counter++;

                // skip MS1s
                if (msn == 1)
                {
                    msScans[scanNumber] = true;
                    continue;
                }

                // Retention Time
                double time = -1.0;
                raw.RTFromScanNum(scanNumber, ref time);
                retention_times.Add(scanNumber, time);

                // Precursor m/z
                double precursorMZ = double.NaN;
                raw.GetPrecursorMassForScanNum(scanNumber, 2, ref precursorMZ);
                scan_filter_mzs.Add(scanNumber, precursorMZ);
                precursor_mzs.Add(scanNumber, precursorMZ);

                double centroid_peak_width = -1.0;
                object precursor_labels = null;
                object precursor_flags = null;
                int mass_list_array_size = -1;
                bool no_precursor_scan;

                int precursor_scan_number = scanNumber - 1;

                no_precursor_scan = true;

                for (int i = precursor_scan_number; i >= 0; i--)
                {
                    if (!msScans[i])
                        continue;
                    no_precursor_scan = false;
                    precursor_scan_number = i;
                    break;
                }

                string scan_filter = null;
                raw.GetFilterForScanNum(scanNumber, ref scan_filter);

                if (!no_precursor_scan && includeLog)
                {
                    precursor_labels = null;
                    precursor_flags = null;
                    raw.GetLabelData(ref precursor_labels, ref precursor_flags, ref precursor_scan_number);

                    var precursor_data = (double[,])precursor_labels;

                    if (precursor_data.Length == 0)
                    {
                        centroid_peak_width = -1.0;
                        precursor_labels = null;
                        precursor_flags = null;
                        mass_list_array_size = -1;
                        raw.GetMassListFromScanNum(ref precursor_scan_number, null, 0, 0, 0, 1,
                            ref centroid_peak_width, ref precursor_labels, ref precursor_flags,
                            ref mass_list_array_size);
                        precursor_data = (double[,])precursor_labels;
                    }

                    int? precursor_index = null;
                    for (int i = precursor_data.GetLowerBound(1); i <= precursor_data.GetUpperBound(1); i++)
                    {
                        if (Math.Abs(precursor_data[(int)RawLabelDataColumn.MZ, i] - precursorMZ) <=
                            PEAK_IDENTIFICATION_MASS_TOLERANCE)
                        {
                            if (!precursor_index.HasValue ||
                                precursor_data[(int)RawLabelDataColumn.Intensity, i] >
                                precursor_data[(int)RawLabelDataColumn.Intensity, precursor_index.Value])
                            {
                                precursor_index = i;
                            }
                        }
                    }

                    if (!precursor_index.HasValue)
                    {
                        for (int i = precursor_data.GetLowerBound(1); i <= precursor_data.GetUpperBound(1); i++)
                        {
                            if (!precursor_index.HasValue ||
                                Math.Abs(precursor_data[(int)RawLabelDataColumn.MZ, i] - precursorMZ) <
                                Math.Abs(precursor_data[(int)RawLabelDataColumn.MZ, precursor_index.Value] -
                                            precursorMZ))
                            {
                                precursor_index = i;
                            }
                        }
                    }

                    if (precursor_index.HasValue)
                    {
                        precursorMZ = precursor_data[(int)RawLabelDataColumn.MZ, precursor_index.Value];

                        //precursor_mzs.Add(scan_number, precursor_mz);
                        precursor_intensities.Add(scanNumber,
                            precursor_data[(int)RawLabelDataColumn.Intensity, precursor_index.Value]);

                        object precursor_header_labels = null;
                        object precursor_header_values = null;
                        int precursor_array_size = -1;
                        raw.GetTrailerExtraForScanNum(precursor_scan_number, ref precursor_header_labels,
                            ref precursor_header_values, ref precursor_array_size);
                        var precursor_header_label_strings = (string[])precursor_header_labels;
                        var precursor_header_value_strings = (string[])precursor_header_values;
                        if (precursor_header_label_strings != null && precursor_header_value_strings != null)
                        {
                            for (int header_i = precursor_header_label_strings.GetLowerBound(0);
                                header_i <= precursor_header_label_strings.GetUpperBound(0);
                                header_i++)
                            {
                                if (
                                    precursor_header_label_strings[header_i].StartsWith(
                                        "Ion Injection Time (ms)"))
                                {
                                    precursor_denormalized_intensities.Add(scanNumber,
                                        precursor_data[(int)RawLabelDataColumn.Intensity, precursor_index.Value
                                            ] * double.Parse(precursor_header_value_strings[header_i]) / 1000.0);
                                }
                            }
                        }

                        if (precursor_data.GetLength(0) > 2)
                        {
                            precursor_sns.Add(scanNumber,
                                (precursor_data[(int)RawLabelDataColumn.Intensity, precursor_index.Value] -
                                 precursor_data[(int)RawLabelDataColumn.NoiseBaseline, precursor_index.Value]) /
                                precursor_data[(int)RawLabelDataColumn.NoiseLevel, precursor_index.Value]);
                        }
                        else
                        {
                            precursor_sns.Add(scanNumber, null);
                        }

                        int peak_depth = 1;
                        for (int i = precursor_data.GetLowerBound(1); i <= precursor_data.GetUpperBound(1); i++)
                        {
                            if (i != precursor_index.Value)
                            {
                                if (precursor_data[(int)RawLabelDataColumn.Intensity, i] >
                                    precursor_data[(int)RawLabelDataColumn.Intensity, precursor_index.Value])
                                {
                                    peak_depth++;
                                }
                            }
                        }

                        precursor_peak_depths.Add(scanNumber, peak_depth);
                    }

                }

                object header_labels = null;
                object header_values = null;
                int array_size = -1;
                raw.GetTrailerExtraForScanNum(scanNumber, ref header_labels, ref header_values, ref array_size);
                var header_label_strings = (string[])header_labels;
                var header_value_strings = (string[])header_values;

                // Charge State Determination
                Polarity polarity = scan_filter.Contains(" - ") ? Polarity.Negative : Polarity.Positive;
                object chargeObj = null;
                raw.GetTrailerExtraValueForScanNum(scanNumber, "Charge State:", ref chargeObj);
                int charge = Convert.ToInt32(chargeObj);
                if (charge == 0 || no_precursor_scan)
                {
                    charge = 2; // Default to 2
                }

                // Flip the sign
                charge *= (int)polarity;

                //int charge = 0;
                //if (header_label_strings != null && header_value_strings != null)
                //{
                //    for (int header_i = header_label_strings.GetLowerBound(0);
                //        header_i <= header_label_strings.GetUpperBound(0);
                //        header_i++)
                //    {
                //        if (header_label_strings[header_i].StartsWith("Charge"))
                //        {
                //            charge = int.Parse(header_value_strings[header_i]);
                //            if (scan_filter.Contains(" - "))
                //            {
                //                charge = -charge;
                //            }
                //            precursor_charge_states.Add(scanNumber, charge);
                //        }
                //        else if (header_label_strings[header_i].StartsWith("Elapsed Scan Time (sec)"))
                //        {
                //            elapsed_scan_times.Add(scanNumber, double.Parse(header_value_strings[header_i]));
                //        }
                //        else if (header_label_strings[header_i].StartsWith("Ion Injection Time (ms)"))
                //        {
                //            ion_injection_times.Add(scanNumber, double.Parse(header_value_strings[header_i]));
                //        }
                //    }
                //}

                var data = new double[0, 0];
                object labels = null;
                object flags = null;
                try
                {
                    raw.GetLabelData(ref labels, ref flags, ref scanNumber);

                    data = (double[,])labels;
                } catch (Exception) { }

                // Check it high res, if not, get the low resolution spectrum
                if (data.Length == 0)
                {
                    centroid_peak_width = -1.0;
                    labels = null;
                    flags = null;
                    mass_list_array_size = -1;
                    raw.GetMassListFromScanNum(ref scanNumber, null, 0, 0, 0, 1, ref centroid_peak_width,
                        ref labels, ref flags, ref mass_list_array_size);
                    data = (double[,])labels;
                }

                if (includeLog)
                {
                    precursor_charge_states.Add(scanNumber, charge);

                    object elapsedScanTime = null;
                    raw.GetTrailerExtraValueForScanNum(scanNumber, "Elapsed Scan Time (sec):", ref elapsedScanTime);
                    elapsed_scan_times.Add(scanNumber, Convert.ToDouble(elapsedScanTime));

                    object injectionTime = null;
                    raw.GetTrailerExtraValueForScanNum(scanNumber, "Ion Injection Time (ms):", ref injectionTime);
                    ion_injection_times.Add(scanNumber, Convert.ToDouble(injectionTime));

                    double total_ion_current = 0.0;
                    double base_peak_mz = -1.0;
                    double base_peak_intensity = -1.0;
                    for (int data_i = data.GetLowerBound(1); data_i <= data.GetUpperBound(1); data_i++)
                    {
                        total_ion_current += data[(int)RawLabelDataColumn.Intensity, data_i];

                        if (base_peak_mz < 0.0 ||
                            data[(int)RawLabelDataColumn.Intensity, data_i] > base_peak_intensity)
                        {
                            base_peak_mz = data[(int)RawLabelDataColumn.MZ, data_i];
                            base_peak_intensity = data[(int)RawLabelDataColumn.Intensity, data_i];
                        }
                    }
                }

                string mass_analyzer = scan_filter.Substring(0, 4).ToUpper();
                if (!mass_analyzer.Contains("MS"))
                {
                    mass_analyzer = "TQMS";
                }

                string fragmentation_method = null;

                if (groupByFragmentation)
                {
                    foreach (int i in AllIndicesOf(scan_filter, '@'))
                    {
                        string temp_scan_filter = scan_filter.Substring(i + 1);
                        temp_scan_filter = temp_scan_filter.Substring(0, temp_scan_filter.IndexOf(' '));
                        fragmentation_method += temp_scan_filter.ToUpper() + '-';
                    }
                }
                else
                {
                    foreach (int i in AllIndicesOf(scan_filter, '@'))
                    {
                        fragmentation_method += scan_filter.Substring(i + 1, 3).ToUpper() + '-';
                    }
                }

                fragmentation_method = fragmentation_method.Substring(0, fragmentation_method.Length - 1);

                string base_output_filename = Path.GetFileNameWithoutExtension(filepath) + '_' + mass_analyzer +
                                              '_' + fragmentation_method;

                if (includeLog)
                {
                    precursor_fragmentation_methods.Add(scanNumber, fragmentation_method);

                    if (!spectrum_counts.ContainsKey(mass_analyzer))
                    {
                        spectrum_counts.Add(mass_analyzer, 0);
                    }
                    spectrum_counts[mass_analyzer]++;

                    if (!dta_counts.ContainsKey(mass_analyzer))
                    {
                        dta_counts.Add(mass_analyzer, 0);
                    }
                    dta_counts[mass_analyzer] += 1;

                    if (!spectrum_counts.ContainsKey(fragmentation_method))
                    {
                        spectrum_counts.Add(fragmentation_method, 0);
                    }
                    spectrum_counts[fragmentation_method]++;

                    if (!dta_counts.ContainsKey(fragmentation_method))
                    {
                        dta_counts.Add(fragmentation_method, 0);
                    }
                    dta_counts[fragmentation_method] += 1;

                    if (!spectrum_counts.ContainsKey(mass_analyzer + ' ' + fragmentation_method))
                    {
                        spectrum_counts.Add(mass_analyzer + ' ' + fragmentation_method, 0);
                    }
                    spectrum_counts[mass_analyzer + ' ' + fragmentation_method]++;

                    if (!dta_counts.ContainsKey(mass_analyzer + ' ' + fragmentation_method))
                    {
                        dta_counts.Add(mass_analyzer + ' ' + fragmentation_method, 0);
                    }
                    dta_counts[mass_analyzer + ' ' + fragmentation_method] += 1;
                }

                if (sequestDtaOutput || omssaTxtOutput || mascotMgfOutput)
                {
                    Spectrum spectrum = new Spectrum(data);

                    double retention_time_min = double.NaN;
                    raw.RTFromScanNum(scanNumber, ref retention_time_min);
                    double retention_time_s = retention_time_min * 60;

                    bool isETD = fragmentation_method.StartsWith("ETD") || fragmentation_method.StartsWith("ECD");

                    string dta_filepath = Path.GetFileNameWithoutExtension(filepath) +
                                            '.' + mass_analyzer + '.' + fragmentation_method +
                                            '.' + scanNumber + '.' +
                                            scanNumber + '.' +
                                            charge + '.' +
                                            "RT_" + retention_time_min.ToString("0.000") + "_min_" +
                                            retention_time_s.ToString("0.0") + "_s" +
                                            ".dta";

                    double precursorMass = Mass.MassFromMz(precursorMZ, charge);
                    int precursorZ = charge;

                    // List of mass ranges to exclude
                    List<IRange<double>> mzRangesToRemove = new List<IRange<double>>(RangesToRemove);

                    // Precursor cleaning
                    if (cleanPrecursor || (enableEtdPreProcessing && isETD))
                    {
                        CleanPrecursor(mzRangesToRemove, precursorMZ, CleanPrecursorLowMz, CleanPrecursorHighMz);
                    }

                    // Neutral Loss cleaning
                    if (NeutralLossesIncluded)
                    {
                        foreach (double mass in neutralLosses)
                        {
                            double mz = precursorMZ - Mass.MzFromMass(mass, charge);
                            double min = mz - LOW_PRECURSOR_CLEANING_WINDOW_MZ;
                            double max = mz + HIGH_PRECURSOR_CLEANING_WINDOW_MZ;
                            mzRangesToRemove.Add(new MzRange(min, max));
                        }
                    }

                    // ETD pre-processing
                    if (enableEtdPreProcessing && isETD)
                    {
                        CleanETD(mzRangesToRemove, precursorMass, precursorZ, EtdLowDa, EtdHighDa);
                    }

                    //// TMT duplex cleaning
                    //if (cleanTmtDuplex)
                    //{
                    //    if (fragmentation_method.StartsWith("CID") || fragmentation_method.StartsWith("PQD") ||
                    //        fragmentation_method.StartsWith("HCD"))
                    //    {
                    //        for (int reduced_charge_i = charge - 1;
                    //            reduced_charge_i >= 1;
                    //            reduced_charge_i--)
                    //        {
                    //            double precursor_tmt_duplex_tag_cleaning_mz = precursorMZ * reduced_charge_i -
                    //                                                            TMT_DUPLEX_CAD_TAG_LOSS_DA /
                    //                                                            reduced_charge_i;

                    //            int p1 = 0;
                    //            while (p1 < peaks.Count)
                    //            {
                    //                double mz = peaks[p1].MZ;

                    //                if ((mz >=
                    //                        MINIMUM_TMT_DUPLEX_CAD_REPORTER_MZ -
                    //                        TMT_DUPLEX_CLEANING_MASS_TOLERANCE_MZ
                    //                        &&
                    //                        mz <=
                    //                        MAXIMUM_TMT_DUPLEX_CAD_REPORTER_MZ +
                    //                        TMT_DUPLEX_CLEANING_MASS_TOLERANCE_MZ)
                    //                    ||
                    //                    (mz >= TMT_DUPLEX_CAD_TAG_MZ - TMT_DUPLEX_CLEANING_MASS_TOLERANCE_MZ
                    //                        &&
                    //                        mz <= TMT_DUPLEX_CAD_TAG_MZ + TMT_DUPLEX_CLEANING_MASS_TOLERANCE_MZ)
                    //                    ||
                    //                    (mz >=
                    //                        precursor_tmt_duplex_tag_cleaning_mz -
                    //                        TMT_DUPLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ
                    //                        &&
                    //                        mz <=
                    //                        precursor_tmt_duplex_tag_cleaning_mz +
                    //                        TMT_DUPLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ))
                    //                {
                    //                    peaks.RemoveAt(p1);
                    //                }
                    //                else
                    //                {
                    //                    p1++;
                    //                }
                    //            }
                    //        }
                    //    }
                    //    else if (fragmentation_method.StartsWith("ETD"))
                    //    {
                    //        for (int reduced_charge_i = charge - 1;
                    //            reduced_charge_i >= 1;
                    //            reduced_charge_i--)
                    //        {
                    //            double precursor_tmt_duplex_reporter_loss_cleaning_mz = precursorMZ * charge -
                    //                                                                    TMT_DUPLEX_ETD_REPORTER_LOSS_DA /
                    //                                                                    reduced_charge_i;
                    //            double precursor_tmt_duplex_tag_loss_cleaning_mz = precursorMZ * charge -
                    //                                                                TMT_DUPLEX_ETD_TAG_LOSS_DA /
                    //                                                                reduced_charge_i;

                    //            int p1 = 0;
                    //            while (p1 < peaks.Count)
                    //            {
                    //                double mz = peaks[p1].MZ;
                    //                if ((mz >=
                    //                        MINIMUM_TMT_DUPLEX_ETD_REPORTER_MZ -
                    //                        TMT_DUPLEX_CLEANING_MASS_TOLERANCE_MZ
                    //                        &&
                    //                        mz <=
                    //                        MAXIMUM_TMT_DUPLEX_ETD_REPORTER_MZ +
                    //                        TMT_DUPLEX_CLEANING_MASS_TOLERANCE_MZ)
                    //                    ||
                    //                    (mz >= TMT_DUPLEX_ETD_TAG_MZ - TMT_DUPLEX_CLEANING_MASS_TOLERANCE_MZ
                    //                        &&
                    //                        mz <= TMT_DUPLEX_ETD_TAG_MZ + TMT_DUPLEX_CLEANING_MASS_TOLERANCE_MZ)
                    //                    ||
                    //                    (mz >=
                    //                        precursor_tmt_duplex_reporter_loss_cleaning_mz -
                    //                        TMT_DUPLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ
                    //                        &&
                    //                        mz <=
                    //                        precursor_tmt_duplex_reporter_loss_cleaning_mz +
                    //                        TMT_DUPLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ)
                    //                    ||
                    //                    (mz >=
                    //                        precursor_tmt_duplex_tag_loss_cleaning_mz -
                    //                        TMT_DUPLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ
                    //                        &&
                    //                        mz <=
                    //                        precursor_tmt_duplex_tag_loss_cleaning_mz +
                    //                        TMT_DUPLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ))
                    //                {
                    //                    peaks.RemoveAt(p1);
                    //                }
                    //                else
                    //                {
                    //                    p1++;
                    //                }
                    //            }
                    //        }
                    //    }
                    //}

                    //// iTRAQ 4-plex cleaning
                    //if (cleanItraq4Plex)
                    //{
                    //    if (fragmentation_method.StartsWith("CID") || fragmentation_method.StartsWith("PQD") ||
                    //        fragmentation_method.StartsWith("HCD"))
                    //    {
                    //        double precursor_itraq_4plex_tag_cleaning_mz = precursorMZ * charge -
                    //                                                        ITRAQ_4PLEX_CAD_TAG_LOSS_DA;

                    //        int p1 = 0;
                    //        while (p1 < peaks.Count)
                    //        {
                    //            double mz = peaks[p1].MZ;

                    //            if ((mz >=
                    //                    MINIMUM_ITRAQ_4PLEX_CAD_REPORTER_MZ -
                    //                    ITRAQ_4PLEX_CLEANING_MASS_TOLERANCE_MZ
                    //                    &&
                    //                    mz <=
                    //                    MAXIMUM_ITRAQ_4PLEX_CAD_REPORTER_MZ +
                    //                    ITRAQ_4PLEX_CLEANING_MASS_TOLERANCE_MZ)
                    //                ||
                    //                (mz >= ITRAQ_4PLEX_CAD_TAG_MZ - ITRAQ_4PLEX_CLEANING_MASS_TOLERANCE_MZ
                    //                    &&
                    //                    mz <= ITRAQ_4PLEX_CAD_TAG_MZ + ITRAQ_4PLEX_CLEANING_MASS_TOLERANCE_MZ)
                    //                ||
                    //                (mz >=
                    //                    precursor_itraq_4plex_tag_cleaning_mz -
                    //                    ITRAQ_4PLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ
                    //                    &&
                    //                    mz <=
                    //                    precursor_itraq_4plex_tag_cleaning_mz +
                    //                    ITRAQ_4PLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ))
                    //            {
                    //                peaks.RemoveAt(p1);
                    //            }
                    //            else
                    //            {
                    //                p1++;
                    //            }
                    //        }
                    //    }
                    //    else if (fragmentation_method.StartsWith("ETD"))
                    //    {
                    //        double precursor_itraq_4plex_reporter_loss_cleaning_mz = precursorMZ * charge -
                    //                                                                    ITRAQ_4PLEX_ETD_REPORTER_LOSS_DA;
                    //        double precursor_itraq_4plex_tag_loss_cleaning_mz = precursorMZ * charge -
                    //                                                            ITRAQ_4PLEX_ETD_TAG_LOSS_DA;

                    //        int p1 = 0;
                    //        while (p1 < peaks.Count)
                    //        {
                    //            double mz = peaks[p1].MZ;
                    //            if ((mz >=
                    //                    MINIMUM_ITRAQ_4PLEX_ETD_REPORTER_MZ -
                    //                    ITRAQ_4PLEX_CLEANING_MASS_TOLERANCE_MZ
                    //                    &&
                    //                    mz <=
                    //                    MAXIMUM_ITRAQ_4PLEX_ETD_REPORTER_MZ +
                    //                    ITRAQ_4PLEX_CLEANING_MASS_TOLERANCE_MZ)
                    //                ||
                    //                (mz >= ITRAQ_4PLEX_ETD_TAG_MZ - ITRAQ_4PLEX_CLEANING_MASS_TOLERANCE_MZ
                    //                    &&
                    //                    mz <= ITRAQ_4PLEX_ETD_TAG_MZ + ITRAQ_4PLEX_CLEANING_MASS_TOLERANCE_MZ)
                    //                ||
                    //                (mz >=
                    //                    precursor_itraq_4plex_reporter_loss_cleaning_mz -
                    //                    ITRAQ_4PLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ
                    //                    &&
                    //                    mz <=
                    //                    precursor_itraq_4plex_reporter_loss_cleaning_mz +
                    //                    ITRAQ_4PLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ)
                    //                ||
                    //                (mz >=
                    //                    precursor_itraq_4plex_tag_loss_cleaning_mz -
                    //                    ITRAQ_4PLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ
                    //                    &&
                    //                    mz <=
                    //                    precursor_itraq_4plex_tag_loss_cleaning_mz +
                    //                    ITRAQ_4PLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ))
                    //            {
                    //                peaks.RemoveAt(p1);
                    //            }
                    //            else
                    //            {
                    //                p1++;
                    //            }
                    //        }
                    //    }
                    //}

                    //// TMT 6-plex cleaning
                    //if (cleanTmt6Plex)
                    //{
                    //    if (fragmentation_method.StartsWith("CID") || fragmentation_method.StartsWith("PQD") ||
                    //        fragmentation_method.StartsWith("HCD"))
                    //    {
                    //        for (int reduced_charge_i = charge - 1;
                    //            reduced_charge_i >= 1;
                    //            reduced_charge_i--)
                    //        {
                    //            double precursor_tmt_6plex_tag_cleaning_mz = precursorMZ * reduced_charge_i -
                    //                                                            TMT_6PLEX_CAD_TAG_LOSS_DA /
                    //                                                            reduced_charge_i;

                    //            int p1 = 0;
                    //            while (p1 < peaks.Count)
                    //            {
                    //                double mz = peaks[p1].MZ;

                    //                if ((mz >=
                    //                        MINIMUM_TMT_6PLEX_CAD_REPORTER_MZ -
                    //                        TMT_6PLEX_CLEANING_MASS_TOLERANCE_MZ
                    //                        &&
                    //                        mz <=
                    //                        MAXIMUM_TMT_6PLEX_CAD_REPORTER_MZ +
                    //                        TMT_6PLEX_CLEANING_MASS_TOLERANCE_MZ)
                    //                    ||
                    //                    (mz >= TMT_6PLEX_CAD_TAG_MZ - TMT_6PLEX_CLEANING_MASS_TOLERANCE_MZ
                    //                        &&
                    //                        mz <= TMT_6PLEX_CAD_TAG_MZ + TMT_6PLEX_CLEANING_MASS_TOLERANCE_MZ)
                    //                    ||
                    //                    (mz >=
                    //                        precursor_tmt_6plex_tag_cleaning_mz -
                    //                        TMT_6PLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ
                    //                        &&
                    //                        mz <=
                    //                        precursor_tmt_6plex_tag_cleaning_mz +
                    //                        TMT_6PLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ))
                    //                {
                    //                    peaks.RemoveAt(p1);
                    //                }
                    //                else
                    //                {
                    //                    p1++;
                    //                }
                    //            }
                    //        }
                    //    }
                    //    else if (fragmentation_method.StartsWith("ETD"))
                    //    {
                    //        for (int reduced_charge_i = charge - 1;
                    //            reduced_charge_i >= 1;
                    //            reduced_charge_i--)
                    //        {
                    //            double precursor_tmt_6plex_reporter_loss_cleaning_mz = precursorMZ * charge -
                    //                                                                    TMT_6PLEX_ETD_REPORTER_LOSS_DA /
                    //                                                                    reduced_charge_i;
                    //            double precursor_tmt_6plex_tag_loss_cleaning_mz = precursorMZ * charge -
                    //                                                                TMT_6PLEX_ETD_TAG_LOSS_DA /
                    //                                                                reduced_charge_i;

                    //            int p1 = 0;
                    //            while (p1 < peaks.Count)
                    //            {
                    //                double mz = peaks[p1].MZ;
                    //                if ((mz >=
                    //                        MINIMUM_TMT_6PLEX_ETD_REPORTER_MZ -
                    //                        TMT_6PLEX_CLEANING_MASS_TOLERANCE_MZ
                    //                        &&
                    //                        mz <=
                    //                        MAXIMUM_TMT_6PLEX_ETD_REPORTER_MZ +
                    //                        TMT_6PLEX_CLEANING_MASS_TOLERANCE_MZ)
                    //                    ||
                    //                    (mz >= TMT_6PLEX_ETD_TAG_MZ - TMT_6PLEX_CLEANING_MASS_TOLERANCE_MZ
                    //                        &&
                    //                        mz <= TMT_6PLEX_ETD_TAG_MZ + TMT_6PLEX_CLEANING_MASS_TOLERANCE_MZ)
                    //                    ||
                    //                    (mz >=
                    //                        precursor_tmt_6plex_reporter_loss_cleaning_mz -
                    //                        TMT_6PLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ
                    //                        &&
                    //                        mz <=
                    //                        precursor_tmt_6plex_reporter_loss_cleaning_mz +
                    //                        TMT_6PLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ)
                    //                    ||
                    //                    (mz >=
                    //                        precursor_tmt_6plex_tag_loss_cleaning_mz -
                    //                        TMT_6PLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ
                    //                        &&
                    //                        mz <=
                    //                        precursor_tmt_6plex_tag_loss_cleaning_mz +
                    //                        TMT_6PLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ))
                    //                {
                    //                    peaks.RemoveAt(p1);
                    //                }
                    //                else
                    //                {
                    //                    p1++;
                    //                }
                    //            }
                    //        }
                    //    }
                    //}

                    //// iTRAQ 8-plex cleaning
                    //if (cleanItraq8Plex)
                    //{
                    //    if (fragmentation_method.StartsWith("CID") || fragmentation_method.StartsWith("PQD") ||
                    //        fragmentation_method.StartsWith("HCD"))
                    //    {
                    //        double precursor_itraq_4plex_tag_cleaning_mz = precursorMZ * charge -
                    //                                                        ITRAQ_8PLEX_CAD_TAG_LOSS_DA;

                    //        int p1 = 0;
                    //        while (p1 < peaks.Count)
                    //        {
                    //            double mz = peaks[p1].MZ;

                    //            if ((mz >=
                    //                    MINIMUM_ITRAQ_8PLEX_CAD_REPORTER_MZ -
                    //                    ITRAQ_8PLEX_CLEANING_MASS_TOLERANCE_MZ
                    //                    &&
                    //                    mz <=
                    //                    MAXIMUM_ITRAQ_8PLEX_CAD_REPORTER_MZ +
                    //                    ITRAQ_8PLEX_CLEANING_MASS_TOLERANCE_MZ)
                    //                ||
                    //                (mz >= ITRAQ_8PLEX_CAD_TAG_MZ - ITRAQ_8PLEX_CLEANING_MASS_TOLERANCE_MZ
                    //                    &&
                    //                    mz <= ITRAQ_8PLEX_CAD_TAG_MZ + ITRAQ_8PLEX_CLEANING_MASS_TOLERANCE_MZ)
                    //                ||
                    //                (mz >=
                    //                    precursor_itraq_4plex_tag_cleaning_mz -
                    //                    ITRAQ_8PLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ
                    //                    &&
                    //                    mz <=
                    //                    precursor_itraq_4plex_tag_cleaning_mz +
                    //                    ITRAQ_8PLEX_LOSS_CLEANING_MASS_TOLERANCE_MZ))
                    //            {
                    //                peaks.RemoveAt(p1);
                    //            }
                    //            else
                    //            {
                    //                p1++;
                    //            }
                    //        }
                    //    }
                    //}

                    // Perform the actual cleaning
                    var cleanedSpectrum = spectrum.Filter(mzRangesToRemove);

                    int cleanSpectrumLength = cleanedSpectrum.Count;
                    double[] mzs = cleanedSpectrum.GetMasses();
                    double[] intenisties = cleanedSpectrum.GetIntensities();

                    if (sequestDtaOutput)
                    {
                        using (StreamWriter dta = new StreamWriter(Path.Combine(outputFolder, dta_filepath)))
                        {
                            if (dta_content_sb.Length > 0)
                            {
                                dta.Write(dta_content_sb.ToString());
                            }
                        }
                    }

                    if (omssaTxtOutput)
                    {
                        string txt_filepath = Path.Combine(outputFolder, base_output_filename + ".txt");

                        StreamWriter writer = null;
                        if (!txt_outputs.TryGetValue(txt_filepath, out writer))
                        {
                            writer = new StreamWriter(new FileStream(txt_filepath, FileMode.Create, FileAccess.Write, FileShare.None, 4096, FileOptions.None));
                            txt_outputs.Add(txt_filepath, writer);
                        }

                        writer.WriteLine("<dta id=\"" + scanNumber + "\" name=\"" + dta_filepath + "\">");
                        writer.WriteLine();

                        writer.WriteLine("{0:0.00000} {1:N0}", precursorMass + Constants.Proton, charge);

                        sb.Clear();
                        for (int i = 0; i < cleanSpectrumLength; i++)
                        {
                            sb.AppendFormat(" {0:F4} {1:F2}", mzs[i], intenisties[i]);
                            sb.AppendLine();
                        }
                        writer.WriteLine(sb.ToString());

                        writer.WriteLine();
                    }

                    if (mascotMgfOutput)
                    {
                        string mgf_filepath = Path.Combine(outputFolder,
                            base_output_filename + ".mgf");

                        if (!mgf_outputs.ContainsKey(mgf_filepath))
                        {
                            mgf_outputs.Add(mgf_filepath, new StreamWriter(mgf_filepath));
                        }

                        StreamWriter mgf = mgf_outputs[mgf_filepath];

                        mgf.WriteLine("BEGIN IONS");
                        mgf.WriteLine("Title=" + Path.GetFileNameWithoutExtension(dta_filepath));
                        mgf.WriteLine("SCANS=" + scanNumber);
                        mgf.WriteLine("RTINSECONDS=" + retention_time_s);
                        mgf.WriteLine("PEPMASS=" + precursorMZ.ToString("0.00000"));
                        mgf.WriteLine("CHARGE=" + charge.ToString("0+;0-"));

                        for (int i = 0; i < cleanSpectrumLength; i++)
                        {
                            mgf.WriteLine("{0:0.00000} {1:0.00}", mzs[i], intenisties[i]);
                        }

                        mgf.WriteLine("END IONS");
                        mgf.WriteLine();
                    }
                }

            }

            if (txt_outputs != null)
            {
                foreach (StreamWriter sw in txt_outputs.Values)
                {
                    if (sw != null)
                    {
                        sw.Close();
                    }
                }
            }
            if (mgf_outputs != null)
            {
                foreach (StreamWriter sw in mgf_outputs.Values)
                {
                    if (sw != null)
                    {
                        sw.Close();
                    }
                }
            }

            if (includeLog)
            {

                log.WriteLine("Spectrum Type\tNumber of Scans");
                foreach (var kvp in spectrum_counts)
                {
                    log.WriteLine(kvp.Key + '\t' + kvp.Value);
                }
                log.WriteLine();

                log.WriteLine("Spectrum Type\tNumber of DTAs");
                foreach (var kvp in dta_counts)
                {
                    log.WriteLine(kvp.Key + '\t' + kvp.Value);
                }
                log.WriteLine();

                double? min_elapsed = null;
                double? max_elapsed = null;
                double mean_elapsed = 0.0;
                foreach (double elapsed_scan_time in elapsed_scan_times.Values)
                {
                    if (!min_elapsed.HasValue || elapsed_scan_time < min_elapsed)
                    {
                        min_elapsed = elapsed_scan_time;
                    }

                    if (!max_elapsed.HasValue || elapsed_scan_time > max_elapsed)
                    {
                        max_elapsed = elapsed_scan_time;
                    }

                    mean_elapsed += elapsed_scan_time;
                }
                mean_elapsed /= elapsed_scan_times.Count;

                if (min_elapsed.HasValue)
                {
                    log.WriteLine("Minimum Fragmentation Elapsed Scan Time (sec): " + min_elapsed.Value);
                }
                if (max_elapsed.HasValue)
                {
                    log.WriteLine("Maximum Fragmentation Elapsed Scan Time (sec): " + max_elapsed.Value);
                }
                if (!Double.IsNaN(mean_elapsed))
                {
                    log.WriteLine("Average Fragmentation Elapsed Scan Time (sec): " + mean_elapsed);
                }

                log.WriteLine();

                double? min_injection = null;
                double? max_injection = null;
                double mean_injection = 0.0;
                foreach (double ion_injection_time in ion_injection_times.Values)
                {
                    if (!min_injection.HasValue || ion_injection_time < min_injection)
                    {
                        min_injection = ion_injection_time;
                    }

                    if (!max_injection.HasValue || ion_injection_time > max_injection)
                    {
                        max_injection = ion_injection_time;
                    }

                    mean_injection += ion_injection_time;
                }
                mean_injection /= ion_injection_times.Count;

                if (min_injection.HasValue)
                {
                    log.WriteLine("Minimum Fragmentation Ion Injection Time (msec): " + min_injection.Value);
                }
                if (max_injection.HasValue)
                {
                    log.WriteLine("Maximum Fragmentation Ion Injection Time (msec): " + max_injection.Value);
                }
                if (!Double.IsNaN(mean_injection))
                {
                    log.WriteLine("Average Fragmentation Ion Injection Time (msec): " + mean_injection);
                }

                log.WriteLine();

                log.WriteLine("Fragmentation Scan Summary");
                log.Write("Fragmentation Scan Number\t");
                log.Write("Retention Time (min.)\t");
                log.Write("Scan Filter m/z\t");
                log.Write("Precursor m/z\t");
                log.Write("Precursor Intensity\t");
                log.Write("Precursor Denormalized Intensity\t");
                log.Write("Precursor Charge State\t");
                log.Write("Precursor S/N Ratio\t");
                log.Write("Precursor Peak Depth\t");
                log.Write("Fragmentation Method\t");
                log.Write("Elapsed Scan Time (sec)\t");
                log.Write("Ion Injection Time (msec)");
                log.WriteLine();
                foreach (int sn2 in retention_times.Keys)
                {
                    log.Write(sn2.ToString() + '\t');
                    log.Write(retention_times[sn2].ToString("0.00") + '\t');
                    log.Write(scan_filter_mzs[sn2].ToString("0.00") + '\t');
                    log.Write((precursor_mzs.ContainsKey(sn2) ? precursor_mzs[sn2].ToString("0.00000") : "n/a") +
                              '\t');
                    log.Write((precursor_intensities.ContainsKey(sn2)
                        ? precursor_intensities[sn2].ToString("0.0")
                        : "n/a") + '\t');
                    log.Write((precursor_denormalized_intensities.ContainsKey(sn2)
                        ? precursor_denormalized_intensities[sn2].ToString("0.0")
                        : "n/a") + '\t');
                    log.Write((precursor_charge_states.ContainsKey(sn2)
                        ? precursor_charge_states[sn2].ToString()
                        : "n/a") + '\t');
                    log.Write((precursor_sns.ContainsKey(sn2) && precursor_sns[sn2].HasValue
                        ? precursor_sns[sn2].Value.ToString()
                        : "n/a") + '\t');
                    log.Write((precursor_peak_depths.ContainsKey(sn2)
                        ? precursor_peak_depths[sn2].ToString()
                        : "n/a") + '\t');
                    log.Write((precursor_fragmentation_methods.ContainsKey(sn2)
                        ? precursor_fragmentation_methods[sn2]
                        : "n/a") + '\t');
                    log.Write((elapsed_scan_times.ContainsKey(sn2) ? elapsed_scan_times[sn2].ToString() : "n/a") +
                              '\t');
                    log.Write((ion_injection_times.ContainsKey(sn2) ? ion_injection_times[sn2].ToString() : "n/a") +
                              '\t');
                    log.WriteLine();
                }

                log.Close();

            }

            if (raw != null)
            {
                raw.Close();
            }
            if (log != null && includeLog)
            {
                log.Close();
            }
            onFinishedFile(new FilepathEventArgs(filepath));
        }
 public SpectrumFragmentsMatch(Spectrum spectrum)
 {
     MassSpectrum = spectrum;
     _fragmentSpectralMatches = new HashSet<FragmentSpectralMatch>();
     _fragments = new HashSet<Fragment>();
 }
Beispiel #4
0
 public Spectrum(Spectrum spectrum)
     : this(spectrum._masses, spectrum._intensities)
 {
 }
Beispiel #5
0
        public static byte[] ConvertSpectrumToBytes(Spectrum spectrum, bool zlibCompressed = false)
        {
            int length = spectrum.Count * sizeof(double);
            byte[] bytes = new byte[length * 2];
            Buffer.BlockCopy(spectrum._masses, 0, bytes, 0, length);
            Buffer.BlockCopy(spectrum._intensities, 0, bytes, length, length);

            if (zlibCompressed)
            {
                bytes = bytes.Compress();

            }

            return bytes;
        }
Beispiel #6
0
 public static string ConvertSpectrumToBase64String(Spectrum spectrum, bool zlibCompressed = false)
 {
     byte[] bytes = ConvertSpectrumToBytes(spectrum, zlibCompressed);
     return Convert.ToBase64String(bytes);
 }