Esempio n. 1
0
        private List<TableExporter.TableTreeNode> getSpectrumSourceGroupTree(DataFilter viewFilter, DataFilter dataFilter, ISession session)
        {
            var groupTreeHeaders = new List<string>
                                           {
                                               "'Group'",
                                               "'Filtered Spectra'",
                                               "'Distinct Peptides'",
                                               "'Distinct Matches'",
                                               "'Distinct Analyses'",
                                               "'Distinct Charges'"
                                           };

            var sourceTreeHeaders = new List<string>
                                           {
                                               "'Source'",
                                               "'Filtered Spectra'",
                                               "'Distinct Peptides'",
                                               "'Distinct Matches'",
                                               "'Distinct Analyses'",
                                               "'Distinct Charges'"
                                           };

            var groupNodes = new List<TableExporter.TableTreeNode>();
            var groups = session.CreateQuery(SpectrumTableForm.AggregateRow.Selection + ", ssgl " +
                                             dataFilter.GetFilteredQueryString(DataFilter.FromPeptideSpectrumMatch,
                                                                               DataFilter.PeptideSpectrumMatchToProtein,
                                                                               DataFilter.PeptideSpectrumMatchToSpectrumSourceGroupLink) +
                                             "GROUP BY ssgl.Group.id")
                                .List<object[]>()
                                .Select(o => new SpectrumTableForm.SpectrumSourceGroupRow(o, viewFilter));
            foreach (var group in groups)
            {
                var newNode = new TableExporter.TableTreeNode
                {
                    Text = group.SpectrumSourceGroup.Name,
                    Headers = groupTreeHeaders,
                    Cells = new List<string>
                            {
                                "'" + group.SpectrumSourceGroup.Name + "'",
                                group.Spectra.ToString(),
                                group.DistinctPeptides.ToString(),
                                group.DistinctMatches.ToString(),
                                group.DistinctAnalyses.ToString(),
                                group.DistinctCharges.ToString()
                            }
                };
                var groupFilter = new DataFilter(viewFilter)
                {
                    SpectrumSourceGroup = new List<SpectrumSourceGroup> { group.SpectrumSourceGroup }
                };

                var sources = session.CreateQuery(SpectrumTableForm.AggregateRow.Selection + ", s.Source " +
                                                      groupFilter.GetFilteredQueryString(DataFilter.FromPeptideSpectrumMatch,
                                                                                         DataFilter.PeptideSpectrumMatchToProtein,
                                                                                         DataFilter.PeptideSpectrumMatchToSpectrumSourceGroupLink) +
                                                      "GROUP BY s.Source.id")
                        .List<object[]>()
                        .Select(o => new SpectrumTableForm.SpectrumSourceRow(o, groupFilter));
                SpectrumTableForm.SpectrumSourceGroupRow ssgr = group;
                sources = from SpectrumTableForm.SpectrumSourceRow s in sources
                          where s.SpectrumSource.Group == ssgr.SpectrumSourceGroup
                          select s;
                foreach (var source in sources)
                {
                    var newSubNode = new TableExporter.TableTreeNode
                    {
                        Text = "source" + source.SpectrumSource.Id ?? string.Empty + ".html",
                        Headers = sourceTreeHeaders,
                        Cells = new List<string>
                                {
                                    String.Format("'<a href=\"{0}.html\">{0}</a>'", source.SpectrumSource.Name),
                                    source.Spectra.ToString(),
                                    source.DistinctPeptides.ToString(),
                                    source.DistinctMatches.ToString(),
                                    source.DistinctAnalyses.ToString(),
                                    source.DistinctCharges.ToString()
                                }
                    };
                    newNode.Nodes.Add(newSubNode);
                }
                groupNodes.Add(newNode);
            }
            return groupNodes;
        }
Esempio n. 2
0
        private Dictionary<string, List<TableExporter.TableTreeNode>> getSourceContentsForHTML(DataFilter viewFilter, DataFilter dataFilter, ISession session)
        {
            const int decimalPlaces = 4;
            var allContents = new Dictionary<string, List<TableExporter.TableTreeNode>>();

            //get score info
            //score gathering is one of the most time-intensive processes in item retreaval
            //loading everything to memory if possible should speed things up significantly
            //low speed system should stay in place in case memory cant handle the load
            var rawScoreList = session.CreateSQLQuery("select name, id from PeptideSpectrumMatchScoreName").List<object[]>();
            var scoreList = new List<string>();
            var scoreNameToId = new Dictionary<string, string>();
            foreach (var item in rawScoreList)
            {
                scoreList.Add(item[0].ToString());
                if (!scoreNameToId.ContainsKey(item[0].ToString()))
                    scoreNameToId.Add(item[0].ToString(), item[1].ToString());
            }
            var scoresCaptured = true;
            var scoreCache = new Dictionary<string, Dictionary<string, string>>();
            try
            {
                var allScores = session.CreateSQLQuery("Select PsmID, ScoreNameId, CAST(Value AS TEXT) from PeptideSpectrumMatchScore").List();
                foreach (var row in allScores)
                {
                    var rowContents = (object[])row;
                    if (!scoreCache.ContainsKey(rowContents[0].ToString()))
                        scoreCache.Add(rowContents[0].ToString(), new Dictionary<string, string>());
                    if (!scoreCache[rowContents[0].ToString()].ContainsKey(rowContents[1].ToString()))
                        scoreCache[rowContents[0].ToString()].Add(rowContents[1].ToString(), rowContents[2].ToString());
                }
            }
            catch (Exception e)
            {
                scoresCaptured = false;
                var errorMessage =
                        "[SpectrumTableForm] Error when precaching data. " +
                        "Results may be processed slower than expected - " +
                        Environment.NewLine + e.Message;
                if (InvokeRequired)
                    Invoke(new Action(() => MessageBox.Show(errorMessage)));
                else
                    MessageBox.Show(errorMessage);
            }

            var sourceTreeHeaders = new List<string>
                                           {
                                               "'Spectrum'",
                                               "'Distinct Peptides'",
                                               "'Distinct Analyses'",
                                               "'Distinct Charges'",
                                               "'Precursor M/Z'"
                                           };

            var psmHeaders = new List<string>()
                                  {
                                      "'Rank'",
                                      "'Charge'",
                                      "'Observed Mass'",
                                      "'Monoisotopic Mass'",
                                      "'Mass Error'",
                                      "'Q Value'",
                                      "'Sequence'"
                                  };

            psmHeaders.AddRange(scoreList.Select(item => string.Format("'{0}'", item)));

            //get source info
            var sources = session.QueryOver<SpectrumSource>().List();
            foreach (var source in sources)
            {
                var exportTable = new List<TableExporter.TableTreeNode>();
                var sourceFilter = new DataFilter(dataFilter) { SpectrumSource = new List<SpectrumSource> { source } };
                var grouping = new List<Grouping<GroupBy>> { new Grouping<GroupBy>(true) { Mode = GroupBy.Spectrum } };
                var spectraRows = SpectrumTableForm.getSpectrumRows(session, grouping, sourceFilter);

                foreach (SpectrumTableForm.SpectrumRow spectra in spectraRows)
                {
                    var key = spectra.Spectrum.NativeID;
                    try
                    {
                        key = pwiz.CLI.msdata.id.abbreviate(key);
                    }
                    catch
                    {
                    }
                    var newBranch = new TableExporter.TableTreeNode
                    {
                        Text = key,
                        Headers = sourceTreeHeaders,
                        Cells = new List<string>
                                {
                                    "'" + key + "'",
                                    spectra.DistinctPeptides.ToString(),
                                    spectra.DistinctAnalyses.ToString(),
                                    spectra.DistinctCharges.ToString(),
                                    Math.Round(spectra.Spectrum.PrecursorMZ,decimalPlaces).ToString()
                                }
                    };
                    foreach (var match in spectra.Spectrum.Matches)
                    {
                        var observedMass = match.Spectrum.PrecursorMZ * match.Charge -
                                           match.Charge * pwiz.CLI.chemistry.Proton.Mass;
                        var matchNode = new TableExporter.TableTreeNode { Text = match.Rank.ToString(), Headers = psmHeaders };
                        var cells = new List<string>
                                      {
                                          "'" + match.Rank + "'",
                                          match.Charge.ToString(),
                                          Math.Round(observedMass,decimalPlaces).ToString(),
                                          Math.Round(match.ObservedNeutralMass,decimalPlaces).ToString(),
                                          Math.Round(match.MonoisotopicMassError,decimalPlaces).ToString(),
                                          Math.Round(match.QValue,decimalPlaces).ToString(),
                                          "'" + match.Peptide.Sequence + "'"
                                      };
                        foreach (var score in scoreList)
                        {
                            if (scoresCaptured)
                            {
                                var scoreValue = scoreCache[match.Id.ToString()][scoreNameToId[score]];
                                cells.Add(Math.Round(double.Parse(scoreValue), decimalPlaces).ToString());
                            }
                            else
                            {
                                try
                                {
                                    cells.Add(Math.Round(match.Scores[score.Trim("'".ToCharArray())], decimalPlaces).ToString());
                                }
                                catch
                                {
                                    cells.Add(string.Empty);
                                }
                            }
                        }
                        matchNode.Cells = cells;
                        newBranch.Nodes.Add(matchNode);
                    }
                    exportTable.Add(newBranch);
                }
                allContents.Add(source.Name, exportTable);
            }
            return allContents;
        }