public override IEnumerable <string> Process() { //Extract chromotagraph information var chroOptions = new ChromatographProfileBuilderOptions(); options.CopyProperties(chroOptions); chroOptions.InputFile = options.InputFile; chroOptions.OutputFile = options.BoundaryOutputFile; chroOptions.DrawImage = false; var builder = new ChromatographProfileBuilder(chroOptions); if (!File.Exists(options.BoundaryOutputFile) || options.Overwrite) { Progress.SetMessage("Finding envelope ..."); builder.Progress = this.Progress; builder.Process(); } //Calculate deuterium enrichment for peptide if (!File.Exists(options.DeuteriumOutputFile) || options.Overwrite) { Progress.SetMessage("Calculating deuterium ..."); var deuteriumOptions = new RTemplateProcessorOptions() { InputFile = options.BoundaryOutputFile, OutputFile = options.DeuteriumOutputFile, RTemplate = DeuteriumR, RExecute = SystemUtils.GetRExecuteLocation(), CreateNoWindow = true }; deuteriumOptions.Parameters.Add("outputImage<-" + (options.DrawImage ? "1" : "0")); deuteriumOptions.Parameters.Add("excludeIsotopic0<-" + (options.ExcludeIsotopic0 ? "1" : "0")); new RTemplateProcessor(deuteriumOptions) { Progress = this.Progress }.Process(); } var deuteriumMap = new AnnotationFormat().ReadFromFile(options.DeuteriumOutputFile).ToDictionary(m => m.Annotations["ChroFile"].ToString()); //Read old spectra information var format = new MascotPeptideTextFormat(); var spectra = format.ReadFromFile(options.InputFile); foreach (var spec in spectra) { spec.Annotations.Remove("RetentionTime"); spec.Annotations.Remove("TheoreticalDeuterium"); spec.Annotations.Remove("ObservedDeuterium"); spec.Annotations.Remove("NumDeuteriumIncorporated"); spec.Annotations.Remove("NumExchangableHydrogen"); spec.Annotations.Remove("DeuteriumEnrichmentPercent"); } var calcSpectra = new List <IIdentifiedSpectrum>(); var aas = new Aminoacids(); foreach (var pep in spectra) { var filename = Path.GetFileNameWithoutExtension(builder.GetTargetFile(pep)); if (deuteriumMap.ContainsKey(filename)) { var numExchangeableHydrogens = aas.ExchangableHAtom(pep.Peptide.PureSequence); var numDeuteriumIncorporated = double.Parse(deuteriumMap[filename].Annotations["NumDeuteriumIncorporated"] as string); pep.Annotations["PeakRetentionTime"] = deuteriumMap[filename].Annotations["RetentionTime"]; pep.Annotations["TheoreticalDeuterium"] = deuteriumMap[filename].Annotations["TheoreticalDeuterium"]; pep.Annotations["ObservedDeuterium"] = deuteriumMap[filename].Annotations["ObservedDeuterium"]; pep.Annotations["NumDeuteriumIncorporated"] = deuteriumMap[filename].Annotations["NumDeuteriumIncorporated"]; pep.Annotations["NumExchangableHydrogen"] = numExchangeableHydrogens; pep.Annotations["DeuteriumEnrichmentPercent"] = numDeuteriumIncorporated / numExchangeableHydrogens; calcSpectra.Add(pep); } } format.PeptideFormat.Headers = format.PeptideFormat.Headers + "\tPeakRetentionTime\tTheoreticalDeuterium\tObservedDeuterium\tNumDeuteriumIncorporated\tNumExchangableHydrogen\tDeuteriumEnrichmentPercent"; format.NotExportSummary = true; format.WriteToFile(GetPeptideDeteriumFile(), calcSpectra); var specGroup = calcSpectra.GroupBy(m => m.Peptide.PureSequence).OrderBy(l => l.Key).ToList(); var times = options.ExperimentalTimeMap.Values.Distinct().OrderBy(m => m).ToArray(); using (var sw = new StreamWriter(options.OutputFile)) { sw.WriteLine("Peptide\t{0}", (from t in times select t.ToString()).Merge("\t")); foreach (var peptide in specGroup) { var curSpectra = peptide.GroupBy(m => options.ExperimentalTimeMap[m.Query.FileScan.Experimental]).ToDictionary(l => l.Key, l => l.ToArray()); if (options.PeptideInAllTimePointOnly && times.Any(l => !curSpectra.ContainsKey(l))) { continue; } sw.Write(peptide.Key); foreach (var time in times) { if (curSpectra.ContainsKey(time)) { var deps = (from spec in curSpectra[time] select double.Parse(spec.Annotations["DeuteriumEnrichmentPercent"].ToString())).ToArray(); var depMedian = Statistics.Median(deps); sw.Write("\t{0:0.######}", depMedian); } else { sw.Write("\tNA"); } } sw.WriteLine(); } } Progress.SetMessage("Peptide deuterium enrichment calculation finished ..."); return(new string[] { options.OutputFile }); }
public override IEnumerable <string> Process() { var annos = new AnnotationFormat().ReadFromFile(boundaryFile); var aas = new Aminoacids(); var pbuilder = new EmassProfileBuilder(); var chroFormat = new ChromatographProfileTextWriter(); foreach (var ann in annos) { var chroFile = Path.Combine(ann.Annotations["ChroDirectory"] as string, ann.Annotations["ChroFile"] as string) + ".tsv"; var peptide = (ann.Annotations["PeptideId"] as string).StringBefore("_"); var start = double.Parse(ann.Annotations["ChroLeft"] as string); var end = double.Parse(ann.Annotations["ChroRight"] as string); var chro = chroFormat.ReadFromFile(chroFile); var chroFiltered = chro.Profiles.Where(l => l.RetentionTime >= start && l.RetentionTime <= end).ToArray(); //all observed isotopimers, start from 1, transfer to zero-based var allIsotopics = (from f in chroFiltered from s in f select s.Isotopic - 1).Distinct().OrderBy(l => l).ToArray(); //get minimum intensity of each isotopimer var minIntensities = (from iso in allIsotopics select(from f in chroFiltered where f.Count > iso select f[iso].Intensity).Min()).ToArray(); //how many isotopic should I trust? var iso0 = (from f in chroFiltered select f.First().Intensity).ToArray(); int maxIso = 1; for (int i = 2; i < allIsotopics.Length; i++) { var isoi = (from f in chroFiltered select f.Count > i ? f[i].Intensity : minIntensities[i]).ToArray(); var corr = MathNet.Numerics.Statistics.Correlation.Pearson(iso0, isoi); if (corr < minPearsonCorrelation) { maxIso = i; break; } } var maxIsoArray = allIsotopics.Where(l => l <= maxIso).ToArray(); //get observed profile in each scan var observedIons = (from f in chroFiltered select(from iso in maxIsoArray select f.Count > iso ? f[iso].Intensity : minIntensities[iso]).ToArray()).ToArray(); var atomComposition = aas.GetPeptideAtomComposition(peptide); var hatom = (int)(Math.Round(aas.ExchangableHAtom(peptide))); for (int h2 = 0; h2 < hatom; h2++) { } var profiles = pbuilder.GetProfile(atomComposition, 1, 3); var isotopicIons = (from peak in profiles select new IsotopicIon() { Mz = peak.Mz, Intensity = peak.Intensity, }).ToArray(); } return(null); }