Пример #1
0
        /// <summary>
        /// Internal spectrum reader to eliminate excess calls to LoadPwizReader() when called from ReadAllSpectra()
        /// </summary>
        /// <param name="scanIndex"></param>
        /// <param name="includePeaks"></param>
        /// <returns></returns>
        private Spectrum ReadSpectrum(int scanIndex, bool includePeaks = true)
        {
            var pwizSpec = _dataFile.run.spectrumList.spectrum(scanIndex - 1, includePeaks);

            var msLevel = (int)(pwizSpec.cvParam(CVID.MS_ms_level).value);
            var tic = (double)(pwizSpec.cvParam(CVID.MS_total_ion_current).value);
            double[] mzArray = new double[0];
            double[] intensityArray = new double[0];
            foreach (var bda in pwizSpec.binaryDataArrays)
            {
                if (bda.hasCVParam(CVID.MS_m_z_array))
                {
                    mzArray = bda.data.ToArray();
                }
                if (bda.hasCVParam(CVID.MS_intensity_array))
                {
                    intensityArray = bda.data.ToArray();
                }
            }
            double scanTime = 0;
            foreach (var s in pwizSpec.scanList.scans)
            {
                if (s.hasCVParam(CVID.MS_scan_start_time))
                {
                    scanTime = (double)(s.cvParam(CVID.MS_scan_start_time).value);
                }
            }
            if (msLevel > 1)
            {
                double? thermoMonoMass = null;
                foreach (var up in pwizSpec.userParams)
                {
                    if (up.name == "[Thermo Trailer Extra]Monoisotopic M/Z:")
                    {
                        thermoMonoMass = (double)(up.value);
                    }
                }
                ActivationMethod am = ActivationMethod.Unknown;
                Data.Spectrometry.IsolationWindow iw = null;
                foreach (var precursor in pwizSpec.precursors)
                {
                    var act = precursor.activation;
                    foreach (var param in act.cvParams)
                    {
                        switch (param.cvid)
                        {
                            case CVID.MS_collision_induced_dissociation:
                                am = ActivationMethod.CID;
                                break;
                            case CVID.MS_electron_transfer_dissociation:
                                am = ActivationMethod.ETD;
                                break;
                            case CVID.MS_beam_type_collision_induced_dissociation:
                                am = ActivationMethod.HCD;
                                break;
                            case CVID.MS_electron_capture_dissociation:
                                am = ActivationMethod.ECD;
                                break;
                            case CVID.MS_pulsed_q_dissociation:
                                am = ActivationMethod.PQD;
                                break;
                        }
                    }
                    var piw = precursor.isolationWindow;
                    var target = (double)(piw.cvParam(CVID.MS_isolation_window_target_m_z).value);
                    var lowOff = (double)(piw.cvParam(CVID.MS_isolation_window_lower_offset).value);
                    var uppOff = (double)(piw.cvParam(CVID.MS_isolation_window_upper_offset).value);
                    int? charge = null;
                    double selectedIonMz = 0;
                    foreach (var si in precursor.selectedIons)
                    {
                        if (si.hasCVParam(CVID.MS_charge_state))
                        {
                            charge = (int)(si.cvParam(CVID.MS_charge_state).value);
                        }
                        selectedIonMz = (double)(si.cvParam(CVID.MS_selected_ion_m_z).value);
                    }
                    if (thermoMonoMass == null || thermoMonoMass.Value.Equals(0))
                    {
                        thermoMonoMass = selectedIonMz;
                    }
                    iw = new Data.Spectrometry.IsolationWindow(target, lowOff, uppOff, thermoMonoMass, charge);
                }
                return new ProductSpectrum(mzArray, intensityArray, scanIndex)
                {
                    NativeId = pwizSpec.id,
                    TotalIonCurrent = tic,
                    ActivationMethod = am,
                    IsolationWindow = iw,
                    MsLevel = msLevel,
                    ElutionTime = scanTime,
                };
            }
            return new Spectrum(mzArray, intensityArray, scanIndex)
            {
                NativeId = pwizSpec.id,
                TotalIonCurrent = tic,
                ElutionTime = scanTime,
                MsLevel = msLevel,
            };
        }
Пример #2
0
        /// <summary>
        /// Internal spectrum reader to eliminate excess calls to LoadPwizReader() when called from ReadAllSpectra()
        /// </summary>
        /// <param name="scanIndex"></param>
        /// <param name="includePeaks"></param>
        /// <returns></returns>
        private Spectrum ReadSpectrum(int scanIndex, bool includePeaks = true)
        {
            var pwizSpec = _dataFile.run.spectrumList.spectrum(scanIndex - 1, includePeaks);

            var msLevel = (int)(pwizSpec.cvParam(CVID.MS_ms_level).value);
            var tic     = (double)(pwizSpec.cvParam(CVID.MS_total_ion_current).value);

            double[] mzArray        = new double[0];
            double[] intensityArray = new double[0];
            foreach (var bda in pwizSpec.binaryDataArrays)
            {
                if (bda.hasCVParam(CVID.MS_m_z_array))
                {
                    mzArray = bda.data.ToArray();
                }
                if (bda.hasCVParam(CVID.MS_intensity_array))
                {
                    intensityArray = bda.data.ToArray();
                }
            }
            double scanTime = 0;

            foreach (var s in pwizSpec.scanList.scans)
            {
                if (s.hasCVParam(CVID.MS_scan_start_time))
                {
                    scanTime = (double)(s.cvParam(CVID.MS_scan_start_time).value);
                }
            }
            if (msLevel > 1)
            {
                double?thermoMonoMass = null;
                foreach (var up in pwizSpec.userParams)
                {
                    if (up.name == "[Thermo Trailer Extra]Monoisotopic M/Z:")
                    {
                        thermoMonoMass = (double)(up.value);
                    }
                }
                ActivationMethod am = ActivationMethod.Unknown;
                Data.Spectrometry.IsolationWindow iw = null;
                foreach (var precursor in pwizSpec.precursors)
                {
                    var act = precursor.activation;
                    var activationMethods = new List <ActivationMethod>();
                    foreach (var param in act.cvParams)
                    {
                        switch (param.cvid)
                        {
                        case CVID.MS_collision_induced_dissociation:
                            activationMethods.Add(ActivationMethod.CID);
                            break;

                        case CVID.MS_electron_transfer_dissociation:
                            activationMethods.Add(ActivationMethod.ETD);
                            break;

                        case CVID.MS_beam_type_collision_induced_dissociation:
                            activationMethods.Add(ActivationMethod.HCD);
                            break;

                        case CVID.MS_electron_capture_dissociation:
                            activationMethods.Add(ActivationMethod.ECD);
                            break;

                        case CVID.MS_pulsed_q_dissociation:
                            activationMethods.Add(ActivationMethod.PQD);
                            break;
                        }
                    }
                    if (activationMethods.Count > 1 && activationMethods.Contains(ActivationMethod.ETD))
                    {
                        am = ActivationMethod.ETD;
                    }
                    else if (activationMethods.Count > 0)
                    {
                        am = activationMethods[0];
                    }

                    var    piw           = precursor.isolationWindow;
                    var    target        = (double)(piw.cvParam(CVID.MS_isolation_window_target_m_z).value);
                    var    lowOff        = (double)(piw.cvParam(CVID.MS_isolation_window_lower_offset).value);
                    var    uppOff        = (double)(piw.cvParam(CVID.MS_isolation_window_upper_offset).value);
                    int?   charge        = null;
                    double selectedIonMz = 0;
                    foreach (var si in precursor.selectedIons)
                    {
                        if (si.hasCVParam(CVID.MS_charge_state))
                        {
                            charge = (int)(si.cvParam(CVID.MS_charge_state).value);
                        }
                        selectedIonMz = (double)(si.cvParam(CVID.MS_selected_ion_m_z).value);
                    }
                    if (thermoMonoMass == null || thermoMonoMass.Value.Equals(0))
                    {
                        thermoMonoMass = selectedIonMz;
                    }
                    iw = new Data.Spectrometry.IsolationWindow(target, lowOff, uppOff, thermoMonoMass, charge);
                }
                return(new ProductSpectrum(mzArray, intensityArray, scanIndex)
                {
                    NativeId = pwizSpec.id,
                    TotalIonCurrent = tic,
                    ActivationMethod = am,
                    IsolationWindow = iw,
                    MsLevel = msLevel,
                    ElutionTime = scanTime,
                });
            }
            return(new Spectrum(mzArray, intensityArray, scanIndex)
            {
                NativeId = pwizSpec.id,
                TotalIonCurrent = tic,
                ElutionTime = scanTime,
                MsLevel = msLevel,
            });
        }