/// <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, }; }
/// <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, }); }