private async void PlotSelected(object sender, SelectionChangedEventArgs e) { ObservableCollection <InSilicoPep> peptides = new ObservableCollection <InSilicoPep>(); Dictionary <string, ObservableCollection <InSilicoPep> > peptidesByProtease = new Dictionary <string, ObservableCollection <InSilicoPep> >(); Dictionary <string, Dictionary <Protein, (double, double)> > sequenceCoverageByProtease = new Dictionary <string, Dictionary <Protein, (double, double)> >(); var selectedPlot = HistogramComboBox.SelectedItem; var objectName = selectedPlot.ToString().Split(':'); var plotName = objectName[1]; //var comboBox = HistogramComboBox as ComboBox; //var plotName = comboBox.SelectedItem as string; foreach (var db in DBSelected) { var PeptidesForAllProteases = PeptideByFile[db]; sequenceCoverageByProtease = CalculateProteinSequenceCoverage(PeptidesForAllProteases); foreach (var protease in PeptidesForAllProteases) { ObservableCollection <InSilicoPep> proteasePeptides = new ObservableCollection <InSilicoPep>(); if (peptidesByProtease.ContainsKey(protease.Key)) { foreach (var protein in protease.Value) { foreach (var peptide in protein.Value) { proteasePeptides.Add(peptide); peptides.Add(peptide); } } peptidesByProtease[protease.Key] = proteasePeptides; } else { foreach (var protein in protease.Value) { foreach (var peptide in protein.Value) { proteasePeptides.Add(peptide); peptides.Add(peptide); } } peptidesByProtease.Add(protease.Key, proteasePeptides); } } } PlotModelStat plot = await Task.Run(() => new PlotModelStat(plotName, peptides, peptidesByProtease, sequenceCoverageByProtease)); plotViewStat.DataContext = plot; }
private async void PlotSelected(object sender, SelectionChangedEventArgs e) { var listview = sender as ListView; var plotName = listview.SelectedItem as string; // get psms from selected source files ObservableCollection <InSilicoPeptide> peptides = new ObservableCollection <InSilicoPeptide>(); Dictionary <string, ObservableCollection <InSilicoPeptide> > peptidesByProtease = new Dictionary <string, ObservableCollection <InSilicoPeptide> >(); //MM code for this section //need to update to get information from our task results to populate peptides //foreach (string fileName in selectSourceFileListBox.SelectedItems) //{ // psmsBSF.Add(fileName, psmsBySourceFile[fileName]); // foreach (PsmFromTsv psm in psmsBySourceFile[fileName]) // { // psms.Add(psm); // } //} PlotModelStat plot = await Task.Run(() => new PlotModelStat(plotName, peptides, peptidesByProtease)); plotViewStat.DataContext = plot; }
//if database selection is changed, refresh what is shown in the plot if that is not changed, similar code to PlotSelected(), but isnt triggered by user private async void RefreshPlot() { HistogramDataTable.Clear(); Dictionary <string, Dictionary <Protein, List <InSilicoPep> > > databasePeptides = new Dictionary <string, Dictionary <Protein, List <InSilicoPep> > >(); if (dataGridProteinDBs.SelectedItems == null) { DBSelected.Add(listOfProteinDbs.First()); } if (DBSelected.Count() > 1) { MessageBox.Show("Note: More than one protein database has been selected. Unique peptides are defined as being unique to a single protein in all selected databases."); } else { MessageBox.Show("Note: One protein database has been selected. Unique peptides are defined as being unique to a single protein in this database."); } List <InSilicoPep> allPeptides = new List <InSilicoPep>(); foreach (var db in DBSelected) { var pep = PeptideByFile[db]; foreach (var entry in pep) { foreach (var protein in entry.Value) { allPeptides.AddRange(protein.Value); } } } Dictionary <string, List <InSilicoPep> > peptidesToProteins = new Dictionary <string, List <InSilicoPep> >(); if (UserParams.TreatModifiedPeptidesAsDifferent) { peptidesToProteins = allPeptides.GroupBy(p => p.FullSequence).ToDictionary(group => group.Key, group => group.ToList()); } else { peptidesToProteins = allPeptides.GroupBy(p => p.BaseSequence).ToDictionary(group => group.Key, group => group.ToList()); } var unique = peptidesToProteins.Where(p => p.Value.Select(p => p.Protein).Distinct().Count() == 1).ToDictionary(group => group.Key, group => group.Value); var shared = peptidesToProteins.Where(p => p.Value.Select(p => p.Protein).Distinct().Count() > 1).ToDictionary(group => group.Key, group => group.Value); foreach (var db in DBSelected) { var pep = PeptideByFile[db]; foreach (var entry in pep) { if (databasePeptides.ContainsKey(entry.Key)) { foreach (var prot in pep[entry.Key]) { if (databasePeptides[entry.Key].ContainsKey(prot.Key)) { List <InSilicoPep> proteinSpecificPeptides = new List <InSilicoPep>(); foreach (var peptide in prot.Value) { if (UserParams.TreatModifiedPeptidesAsDifferent) { if (unique.ContainsKey(peptide.FullSequence)) { peptide.Unique = true; proteinSpecificPeptides.Add(peptide); } else { peptide.Unique = false; proteinSpecificPeptides.Add(peptide); } } else { if (unique.ContainsKey(peptide.BaseSequence)) { peptide.Unique = true; proteinSpecificPeptides.Add(peptide); } else { peptide.Unique = false; proteinSpecificPeptides.Add(peptide); } } } databasePeptides[entry.Key][prot.Key].AddRange(proteinSpecificPeptides); } else { List <InSilicoPep> proteinSpecificPeptides = new List <InSilicoPep>(); foreach (var peptide in prot.Value) { if (UserParams.TreatModifiedPeptidesAsDifferent) { if (unique.ContainsKey(peptide.FullSequence)) { peptide.Unique = true; proteinSpecificPeptides.Add(peptide); } else { peptide.Unique = false; proteinSpecificPeptides.Add(peptide); } } else { if (unique.ContainsKey(peptide.BaseSequence)) { peptide.Unique = true; proteinSpecificPeptides.Add(peptide); } else { peptide.Unique = false; proteinSpecificPeptides.Add(peptide); } } } databasePeptides[entry.Key].Add(prot.Key, proteinSpecificPeptides); } } } else { Dictionary <Protein, List <InSilicoPep> > proteinDic = new Dictionary <Protein, List <InSilicoPep> >(); foreach (var prot in entry.Value) { List <InSilicoPep> proteinSpecificPeptides = new List <InSilicoPep>(); foreach (var peptide in prot.Value) { if (UserParams.TreatModifiedPeptidesAsDifferent) { if (unique.ContainsKey(peptide.FullSequence)) { peptide.Unique = true; proteinSpecificPeptides.Add(peptide); } else { peptide.Unique = false; proteinSpecificPeptides.Add(peptide); } } else { if (unique.ContainsKey(peptide.BaseSequence)) { peptide.Unique = true; proteinSpecificPeptides.Add(peptide); } else { peptide.Unique = false; proteinSpecificPeptides.Add(peptide); } } } proteinDic.Add(prot.Key, proteinSpecificPeptides); } databasePeptides.Add(entry.Key, proteinDic); } } } ObservableCollection <InSilicoPep> peptides = new ObservableCollection <InSilicoPep>(); Dictionary <string, ObservableCollection <InSilicoPep> > peptidesByProtease = new Dictionary <string, ObservableCollection <InSilicoPep> >(); Dictionary <string, Dictionary <Protein, (double, double)> > sequenceCoverageByProtease = new Dictionary <string, Dictionary <Protein, (double, double)> >(); var selectedPlot = HistogramComboBox.SelectedItem; var objectName = selectedPlot.ToString().Split(':'); var plotName = objectName[1]; sequenceCoverageByProtease = CalculateProteinSequenceCoverage(databasePeptides); foreach (var protease in databasePeptides) { ObservableCollection <InSilicoPep> proteasePeptides = new ObservableCollection <InSilicoPep>(); if (peptidesByProtease.ContainsKey(protease.Key)) { foreach (var protein in protease.Value) { foreach (var peptide in protein.Value) { proteasePeptides.Add(peptide); peptides.Add(peptide); } } peptidesByProtease[protease.Key] = proteasePeptides; } else { foreach (var protein in protease.Value) { foreach (var peptide in protein.Value) { proteasePeptides.Add(peptide); peptides.Add(peptide); } } peptidesByProtease.Add(protease.Key, proteasePeptides); } } ProgressBar progressBar = new ProgressBar(); progressBar.Orientation = Orientation.Horizontal; progressBar.Width = 200; progressBar.Height = 30; progressBar.IsIndeterminate = true; HistogramLoading.Items.Add(progressBar); //make the plot PlotModelStat plot = await Task.Run(() => new PlotModelStat(plotName, peptides, peptidesByProtease, sequenceCoverageByProtease)); progressBar.IsIndeterminate = false; //send the plot to GUI plotViewStat.DataContext = plot; //send the data table with plot info to GUI for export if desired HistogramDataTable = plot.DataTable; HistogramLoading.Items.Clear(); }