public void GenerateiRTChromatogram(Run run) { foreach (IRTPeak irtpeak in run.IRTPeaks) { float TotalFWHM = 0; float Totalpeaksym = 0; int count = 0; foreach (var transition in irtpeak.AssociatedTransitions) { starttimes = irtpeak.Spectrum.Where(x => Math.Abs(x.Mz - transition.ProductMz) < run.AnalysisSettings.MassTolerance && Math.Abs(x.RetentionTime - irtpeak.RetentionTime) < run.AnalysisSettings.RtTolerance).Select(x => (double)x.RetentionTime).ToArray(); intensities = irtpeak.Spectrum.Where(x => Math.Abs(x.Mz - transition.ProductMz) < run.AnalysisSettings.MassTolerance).Select(x => (double)x.Intensity).ToArray(); cPF = new CrawdadSharp.CrawdadPeakFinder(); cPF.SetChromatogram(starttimes, intensities); crawPeaks = cPF.CalcPeaks(); foreach (CrawdadSharp.CrawdadPeak crawPeak in crawPeaks) { TotalFWHM += crawPeak.Fwhm; if (crawPeak.Fvalue > 0) { Totalpeaksym += crawPeak.Fwfpct / (crawPeak.Fvalue * 2); } else { Totalpeaksym += crawPeak.Fwfpct; } count++; } } irtpeak.FWHM = TotalFWHM / count; //average fwhm irtpeak.Peaksym = Totalpeaksym / count; //Because we have ordered the possible peaks according to their intensities, this value corresponds to their intensity rank } }
public void GenerateChromatogram(Run run) { //Crawdad foreach (BasePeak basepeak in run.BasePeaks) { //for each peak within the spectrum for (int yyy = 0; yyy < basepeak.BpkRTs.Count(); yyy++) { //change these two arrays to be only the spectra surrounding that bpkrt: intensities = basepeak.Spectrum.Where(x => Math.Abs(x.RetentionTime - basepeak.BpkRTs[yyy]) < run.AnalysisSettings.RtTolerance).Select(x => (double)x.Intensity).ToArray(); starttimes = basepeak.Spectrum.Where(x => Math.Abs(x.RetentionTime - basepeak.BpkRTs[yyy]) < run.AnalysisSettings.RtTolerance).Select(x => (double)x.RetentionTime).ToArray(); if (intensities.Count() > 1) { RTandInt inter = new RTandInt(); inter = Interpolate(starttimes, intensities); starttimes = inter.starttimes; intensities = inter.intensities; } cPF = new CrawdadSharp.CrawdadPeakFinder(); cPF.SetChromatogram(starttimes, intensities); crawPeaks = cPF.CalcPeaks(); double totalFwhm = 0; double totalPeakSym = 0; double totalBaseWidth = 0; foreach (CrawdadSharp.CrawdadPeak crawPeak in crawPeaks) { double peakTime = starttimes[crawPeak.TimeIndex]; double fwhm = crawPeak.Fwhm; double fvalue = crawPeak.Fvalue; if (fwhm == 0) { continue; } else if (fvalue != 0) { totalPeakSym += crawPeak.Fwfpct / (2 * crawPeak.Fvalue); //From USP31: General Chapters <621> Chromatography equation for calculating the tailing factor(Available at: http://www.uspbpep.com/usp31/v31261/usp31nf26s1_c621.asp). A high value means that the peak is highly asymmetrical. } totalFwhm += fwhm; if (!float.IsNaN(crawPeak.FwBaseline)) { totalBaseWidth += crawPeak.FwBaseline; } else { totalBaseWidth += crawPeak.Fwfpct; } } if (crawPeaks.Count() > 0) { basepeak.FWHMs.Add(totalFwhm / crawPeaks.Count()); basepeak.Peaksyms.Add(totalPeakSym / crawPeaks.Count()); basepeak.FullWidthBaselines.Add(totalBaseWidth / crawPeaks.Count()); } else { basepeak.FWHMs.Add(0); basepeak.FullWidthBaselines.Add(0); basepeak.Peaksyms.Add(0); } } } }