/// <summary> /// Illustrate how to use /// GetSpectrum(double retentionTime, MSScanType scanType, IonPolarity ionPolarity, IonizationMode ionMode, IMsdrPeakFilter peakFilter, bool peakFilterOnCentroid); /// Get a TIC, and then use the retention time array to access each scan. /// </summary> /// <param name="dataAccess"></param> private void DoSpectrumExtractionTest(IMsdrDataReader dataAccess) { IMsdrPeakFilter filter1 = new MsdrPeakFilter(); filter1.AbsoluteThreshold = 10; filter1.RelativeThreshold = 0.1; filter1.MaxNumPeaks = 0; IBDAChromFilter chromFilter = new BDAChromFilter(); chromFilter.ChromatogramType = ChromType.TotalIon; chromFilter.DesiredMSStorageType = DesiredMSStorageType.PeakElseProfile; IBDAChromData[] chroms = dataAccess.GetChromatogram(chromFilter); IBDAChromData chrom = chroms[0]; double[] retTime = chrom.XArray; for (int i = 0; i < retTime.Length; i++) { println("Extract spectrum at RT=" + retTime[i]); //Get a spectrum without doing peak filtering if the spectrum is centroid //The peak filter passed in will be applied to profile spectrum, but not //centroid spectrum, because the flag peakFilterOnCentroid=false IBDASpecData spec = dataAccess.GetSpectrum(retTime[i], MSScanType.All, IonPolarity.Mixed, IonizationMode.Unspecified, filter1, false);//peakFilterOnCentroid=false /*//uncomment this section if you want to print out spectrum points * double[] mzVals = spec.XArray; * float[] aboundanceVals = spec.YArray; * for (int j = 0; j < mzVals.Length; j++) * { * println(mzVals[j] + ", " + aboundanceVals[j]); * } */ //Get a spectrum and apply peak filtering to it regardless profile or centroid IBDASpecData spec2 = dataAccess.GetSpectrum(retTime[i], MSScanType.All, IonPolarity.Mixed, IonizationMode.Unspecified, filter1, true);//peakFilterOnCentroid=true /* * mzVals = spec.XArray; * aboundanceVals = spec.YArray; * for (int j = 0; j < mzVals.Length; j++) * { * if (aboundanceVals[j] > 5000) * { * println(mzVals[j] + ", " + aboundanceVals[j]); * } * } */ if (spec2.TotalDataPoints > spec.TotalDataPoints) {//since spec2 is always thresholded, it must have less than or equal # of points as spec println(" Error: filtered spectrum contains more points than unfiltered spectrum!"); } } }
public static IBDAChromData GetChromData(this IMsdrDataReader reader) { IBDAChromFilter chroFilter = new BDAChromFilter(); chroFilter.ChromatogramType = ChromType.TotalIon; chroFilter.DoCycleSum = false; chroFilter.DesiredMSStorageType = DesiredMSStorageType.PeakElseProfile; IBDAChromData[] chro = reader.GetChromatogram(chroFilter); return(chro[0]); }
private static ITICData DOReadTICTest1(string FileName) // data file name, such as c:\temp\mydata.d { IDataAccess dataAccessor = new DataAccess() as IDataAccess; string sFileName = string.Empty; try { double[] m_allRtArray = null; // RT x-value float[] m_allTicYArray = null; // TIC y-values sFileName = FileName; dataAccessor.OpenDataFile(sFileName); var m_BDADataAccess = dataAccessor.BaseDataAccess; IBDAChromFilter psetfilter = new BDAChromFilter(); psetfilter.ChromatogramType = ChromType.TotalIon; IBDAChromData[] chromarray = m_BDADataAccess.GetChromatogram(psetfilter); m_allRtArray = chromarray[0].XArray; m_allTicYArray = chromarray[0].YArray; TICData tICData = new TICData(); tICData.SetTICData(m_allRtArray, m_allTicYArray); return(tICData); } catch (Exception ex) { // MessageBox.Show(ex.Message); throw; } finally { if (!string.IsNullOrEmpty(sFileName)) { dataAccessor.CloseDataFile(); // make sure the data file will be closed } } }
// Examine triggered MRM data file transition chromatograms to see which are // for primary transitions. private void TestIsPrimaryChrom(string tMrmFilePath) { IMsdrDataReader dataReader = new MassSpecDataReader(); dataReader.OpenDataFile(tMrmFilePath); IBDAChromFilter filter = new BDAChromFilter(); filter.ChromatogramType = ChromType.MultipleReactionMode; filter.MSScanTypeFilter = MSScanType.MultipleReaction; filter.ExtractOneChromatogramPerScanSegment = true; filter.DoCycleSum = false; IBDAChromData[] chroms = dataReader.GetChromatogram(filter); foreach (IBDAChromData chrom in chroms) { bool val = chrom.IsPrimaryMrm; string s = string.Format("{0}->{1}, {2}", chrom.MZOfInterest[0].Start, chrom.MeasuredMassRange[0].Start, val); println(s); } dataReader.CloseDataFile(); }
private void GetAxisInformation(IMsdrDataReader dataAccess) { DataUnit chromunit; DataValueType chromvalueType; IBDAChromFilter filter = new BDAChromFilter(); filter.ChromatogramType = ChromType.TotalIon; IBDAChromData[] chroms = dataAccess.GetChromatogram(filter); if (chroms.Length > 0) { chroms[0].GetXAxisInfoChrom(out chromunit, out chromvalueType); println("X Axis"); println("======"); println("Data Unit: " + BaseUtilities.GetEnumString(chromunit, true)); println("Data Value type: " + BaseUtilities.GetEnumString(chromvalueType, true)); chroms[0].GetYAxisInfoChrom(out chromunit, out chromvalueType); println("Y Axis"); println("======"); println("Data Unit: " + BaseUtilities.GetEnumString(chromunit, true)); println("Data Value type: " + BaseUtilities.GetEnumString(chromvalueType, true)); println(string.Empty); } }
/// <summary> /// EIC Extraction /// </summary> /// <param name="dataAccess"></param> private void ExtractEIC(IMsdrDataReader dataAccess) { IBDAChromFilter filter = new BDAChromFilter(); filter.ChromatogramType = ChromType.ExtractedIon; IRange[] ranges = new IRange[1]; ranges[0] = new CenterWidthRange(158, 1);//EC: center mass is 158 Da, with a 1 Da window // ranges[0] = new MinMaxRange(157.5, 158.5);//EC: this is another way to do the same thing filter.IncludeMassRanges = ranges; IBDAChromData[] chroms = dataAccess.GetChromatogram(filter); println("\n EIC EXTRACTION\n"); string chromDesc = string.Empty; for (int i = 0; i < chroms.Length; i++) { chromDesc = "Chromatogram extracted with : Chromatogram type =" + chroms[i].ChromatogramType.ToString() + " and Total Datapoints = " + chroms[i].TotalDataPoints.ToString() + " for range = " + chroms[i].AcquiredTimeRange[0].Start.ToString() + "-" + chroms[i].AcquiredTimeRange[0].End.ToString() + Environment.NewLine; println(chromDesc); } }
/// <summary> /// Get all Product Ion MS/MS scans and print out the precursor and collision energy. /// </summary> private void GetPrecursorInfo(IMsdrDataReader dataAccess) { //Create a chromatogram filter to let the scans that match //the filter criteria to pass through IBDAChromFilter chromFilter = new BDAChromFilter(); chromFilter.ChromatogramType = ChromType.TotalIon; chromFilter.DesiredMSStorageType = DesiredMSStorageType.PeakElseProfile;//This means to use peak scans if available, otherwise use profile scans chromFilter.MSLevelFilter = MSLevel.MSMS; chromFilter.MSScanTypeFilter = MSScanType.ProductIon; IBDAChromData[] chroms = dataAccess.GetChromatogram(chromFilter);//expect 1 chromatogram because we're not asking it to separate by scan segments, etc. IBDAChromData chrom = chroms[0]; double[] retTime = chrom.XArray; println("Get MS/MS spectra using retention time"); for (int i = 0; i < retTime.Length; i++) { //for each retention time, get the corresponding scan //passing in null for peak filter means no peak threshold applied IBDASpecData spec = dataAccess.GetSpectrum(retTime[i], MSScanType.ProductIon, IonPolarity.Mixed, IonizationMode.Unspecified, null); print("RT=" + retTime[i] + ", "); int precursorCount = 0; double[] precursorIons = spec.GetPrecursorIon(out precursorCount); if (precursorCount == 1) { print("Precursor Ions:"); for (int j = 0; j < precursorIons.Length; j++) { print(precursorIons[j] + " "); } println(""); int charge; double intensity; if (spec.GetPrecursorCharge(out charge)) { println(" charge: " + charge); } else { println(" no charge avaialble"); } if (spec.GetPrecursorIntensity(out intensity)) { println(" intensity: " + intensity); } else { println(" no intensity available"); } } else { println("No precursor ions"); } /* * //Uncomment this if you want to print out x and y values of the spectrum. * double[] mzVals = spec.XArray; * float[] aboundanceVals = spec.YArray; * println("RT=" + retTime[i]); * for (int j = 0; j < mzVals.Length; j++) * { * println(mzVals[j] + ", " + aboundanceVals[j]); * } */ } }