Matrix Science header

peptide_list.cpp

Show the list of peptides in a table - for use as a CGI application.

/*
##############################################################################
# file: peptide_list.cpp                                                     #
# 'msparser' toolkit                                                         #
# Test harness / example code                                                #
##############################################################################
# COPYRIGHT NOTICE                                                           #
# Copyright 1998-2005 Matrix Science Limited  All Rights Reserved.           #
#                                                                            #
##############################################################################
#    $Source: parser/examples/test_cxx/peptide_list.cpp $ #
#     $Author: villek@matrixscience.com $ #
#       $Date: 2018-07-30 16:23:53 +0100 $ #
#   $Revision: 1b450440f9c97e1e41d0fc6016a27d68951d4532 | MSPARSER_REL_2_8_1-0-gea32989045 $ #
# $NoKeywords::                                                            $ #
##############################################################################
*/

/*
##############################################################################
# Print out a table of results - peptide based list for QA
# Table should contain a list of unique peptides - every significant match
# Copy the executable to the mascot/cgi directory, and then, when looking
# at a report replace the master_results.pl in the URL with peptide_list.exe
##############################################################################
*/

#include "msparser.hpp"

#include <set>
#include <iostream>
#include <time.h>
#include <iomanip>


// All the classes are part of the matrix_science namespace
using namespace matrix_science;


/*****************************************************************************/
/* main                                                                      */
/* Call this program with a single argument - file=[name of the .dat file]   */
/*****************************************************************************/
int main(int argc, char * argv[])
{
#ifdef _DEBUG
    putenv("QUERY_STRING=file=../data/20021123/F018521.dat");
#endif
    std::cout << "Content-type: text/html"         << std::endl << std::endl;
    std::cout << "<HTML>"                          << std::endl;
    std::cout << "<HEAD>"                          << std::endl;
    std::cout << "  <TITLE>Mascot summary</TITLE>" << std::endl;
    std::cout << "</HEAD>"                         << std::endl;
    std::cout << "<BODY BGCOLOR=\"#ffffff\">"      << std::endl;;

    if (getenv("QUERY_STRING") && strncmp(getenv("QUERY_STRING"), "file=", 5) == 0)
    {
        ms_mascotresfile file(getenv("QUERY_STRING")+strlen("file="));

        if (file.isValid())
        {
            if (file.isMSMS())
            {
                ms_mascotresults * results;
                results = new ms_peptidesummary(file, 
                                                ms_mascotresults::MSRES_GROUP_PROTEINS | 
                                                ms_mascotresults::MSRES_SHOW_SUBSETS,
                                                0,               // minProbability
                                                1000,            // number of hits
                                                0,               // ignoreIonsScoreBelow
                                                0);              // minimum peptide length


                ms_protein * prot = results->getHit(1);
                if (!prot)
                    std::cout << "No significant matches" << std::endl;
                else
                {
                    std::set<std::string> pep_strings;

                    std::cout << "<TABLE BORDER=1>" << std::endl;
                    std::cout << "  <TR>" << std::endl;
                    std::cout << "    <TD><B>Peptide</B></TD>"     << std::endl
                              << "    <TD><B>Score</B></TD>"       << std::endl
                              << "    <TD><B>Query</B></TD>"       << std::endl
                              << "    <TD><B>Rank</B></TD>"       << std::endl
                              << "    <TD><B>Proteins</B></TD>"    << std::endl;
                    std::cout << "  </TR>" << std::endl;
                    for (int query=1; query <= file.getNumQueries(); query++)
                    {
                        for (int p=1; p <= 10; p++)
                        {
                            double threshold = results->getPeptideIdentityThreshold(query, 20);
                            ms_peptide * pep;
                            if ( results->getPeptide(query, p, pep)
                            &&  (pep->getIonsScore() >= threshold))
                            {
                                if (pep_strings.insert(pep->getPeptideStr()).second)
                                {
                                    std::cout << "  <TR>" << std::endl;
                                    std::cout << "    <TD>" 
                                              << pep->getPeptideStr().c_str()
                                              << "    </TD>" 
                                              << std::endl;
                                    std::cout << "    <TD>" 
                                              << pep->getIonsScore()
                                              << "    </TD>"
                                              << std::endl;
                                    std::cout << "    <TD>" << query << "    </TD>" << std::endl;
                                    std::cout << "    <TD>" << p     << "    </TD>" << std::endl;
                                    std::cout << "    <TD>" 
                                              << results->getProteinsWithThisPepMatch(query, p).c_str()
                                              << "    </TD>" 
                                              << std::endl;
                                    std::cout << "  </TR>" << std::endl;
                                }
                            }
                        }
                    }
                    std::cout << "</TABLE>" << std::endl;
                }
                if (file.getLastError())
                {
                    std::cout << "There was an error..." << std::endl;
                    std::cout << "Error: " << file.getLastErrorString() << std::endl;
                }
            }
        }
        else
            std::cout << "Error: " << file.getLastErrorString() << std::endl;
    }
    else 
        std::cout << "Must supply 'file=[name of a .dat file]'" 
                  << "Number of args = " << argc 
                  << "QS=" << getenv("QUERY_STRING")
                  <<std::endl;
    std::cout << "</BODY>"   << std::endl;;
    std::cout << "</HTML>"   << std::endl;;
    return 0;
}

/* Will give for example the following output:
<TABLE BORDER=1>
  <TR>
    <TD><B>Peptide</B></TD>
    <TD><B>Score</B></TD>
    <TD><B>Query</B></TD>
    <TD><B>Rank</B></TD>
    <TD><B>Proteins</B></TD>
  </TR>
  <TR>
    <TD>GPSSVEDIK    </TD>
    <TD>68.06    </TD>
    <TD>17    </TD>
    <TD>1    </TD>
    <TD>9:Q96AT6      </TD>
  </TR>
  <TR>
    <TD>SGEVLVNVK    </TD>
    <TD>79.37    </TD>
    <TD>18    </TD>
    <TD>1    </TD>
    <TD>13:S60335  15:Q9QZD9      </TD>
  </TR>
  <TR>
    <TD>MSDGLFLQK    </TD>
    <TD>54.93    </TD>
    <TD>29    </TD>
    <TD>1    </TD>
    <TD>16:S55282      </TD>
  </TR>
  <TR>
    <TD>LGGSQEDQIK    </TD>
    <TD>67.93    </TD>
    <TD>31    </TD>
    <TD>1    </TD>
    <TD>2:AAH10103      </TD>
  </TR>
  <TR>
    <TD>AGLGHPAAFGR    </TD>
    <TD>57.48    </TD>
    <TD>34    </TD>
    <TD>1    </TD>
    <TD>19:DDH1_HUMAN      </TD>
  </TR>
  <TR>
    <TD>TPEEYPESAK    </TD>
    <TD>54.88    </TD>
    <TD>37    </TD>
    <TD>1    </TD>
    <TD>19:DDH1_HUMAN      </TD>
  </TR>
  <TR>
    <TD>SSGTSYPDVLK    </TD>
    <TD>63.42    </TD>
    <TD>38    </TD>
    <TD>1    </TD>
    <TD>4:TRBOTR  6:1NTP      </TD>
  </TR>
  <TR>
    <TD>VCNYVSWIK    </TD>
    <TD>55.78    </TD>
    <TD>41    </TD>
    <TD>1    </TD>
    <TD>4:TRBOTR  6:1NTP      </TD>
  </TR>
  <TR>
    <TD>IDTIEIITDR    </TD>
    <TD>69.04    </TD>
    <TD>43    </TD>
    <TD>1    </TD>
    <TD>8:AAC26867  11:Q9TTV2      </TD>
  </TR>
  <TR>
    <TD>DITSDTSGDFR    </TD>
    <TD>69.53    </TD>
    <TD>45    </TD>
    <TD>1    </TD>
    <TD>1:LUHU  3:AAB19866  7:ANX1_MOUSE      </TD>
  </TR>
  <TR>
    <TD>LLGELLQDNAK    </TD>
    <TD>64.14    </TD>
    <TD>46    </TD>
    <TD>1    </TD>
    <TD>2:AAH10103      </TD>
  </TR>
  <TR>
    <TD>VGMIPVPYVEK    </TD>
    <TD>54.23    </TD>
    <TD>52    </TD>
    <TD>1    </TD>
    <TD>18:S41754      </TD>
  </TR>
  <TR>
    <TD>TPAQFDADELR    </TD>
    <TD>66.27    </TD>
    <TD>53    </TD>
    <TD>1    </TD>
    <TD>1:LUHU  3:AAB19866  5:AAC78495  7:ANX1_MOUSE  27:CAA64477      </TD>
  </TR>
  <TR>
    <TD>LSSTWEGIQAGK    </TD>
    <TD>77.53    </TD>
    <TD>54    </TD>
    <TD>1    </TD>
    <TD>2:AAH10103      </TD>
  </TR>
  <TR>
    <TD>SLDLDSIIAEVK    </TD>
    <TD>80.49    </TD>
    <TD>56    </TD>
    <TD>1    </TD>
    <TD>17:AAG41947      </TD>
  </TR>
  <TR>
    <TD>AVLENNLGAAVLR    </TD>
    <TD>57.63    </TD>
    <TD>63    </TD>
    <TD>1    </TD>
    <TD>36:Q9BS89      </TD>
  </TR>
  <TR>
    <TD>ALEESNYELEGK    </TD>
    <TD>59.06    </TD>
    <TD>67    </TD>
    <TD>1    </TD>
    <TD>22:KRMSE1      </TD>
  </TR>
  <TR>
    <TD>VLGTEELYGYLK    </TD>
    <TD>65.31    </TD>
    <TD>68    </TD>
    <TD>1    </TD>
    <TD>14:B35838      </TD>
  </TR>
  <TR>
    <TD>VLGTDELYGYLK    </TD>
    <TD>65.31    </TD>
    <TD>68    </TD>
    <TD>2    </TD>
    <TD>12:B38611      </TD>
  </TR>
  <TR>
    <TD>GVDEATIIDILTK    </TD>
    <TD>73.44    </TD>
    <TD>69    </TD>
    <TD>1    </TD>
    <TD>1:LUHU  3:AAB19866  5:AAC78495  7:ANX1_MOUSE  20:LUGP1      </TD>
  </TR>
  <TR>
    <TD>QSLEASLAETEGR    </TD>
    <TD>60.48    </TD>
    <TD>70    </TD>
    <TD>1    </TD>
    <TD>22:KRMSE1      </TD>
  </TR>
  <TR>
    <TD>TPYTDVNIVTIR    </TD>
    <TD>73.23    </TD>
    <TD>71    </TD>
    <TD>1    </TD>
    <TD>16:S55282      </TD>
  </TR>
  <TR>
    <TD>ALAGCDFLTISPK    </TD>
    <TD>58.07    </TD>
    <TD>72    </TD>
    <TD>1    </TD>
    <TD>2:AAH10103      </TD>
  </TR>
  <TR>
    <TD>WELLQQVDTSTR    </TD>
    <TD>64.49    </TD>
    <TD>80    </TD>
    <TD>1    </TD>
    <TD>17:AAG41947      </TD>
  </TR>
  <TR>
    <TD>EVYQQQQYGSGGR    </TD>
    <TD>66.95    </TD>
    <TD>83    </TD>
    <TD>1    </TD>
    <TD>10:Q9BQ99      </TD>
  </TR>
  <TR>
    <TD>IFVGGLNPEATEEK    </TD>
    <TD>62.15    </TD>
    <TD>84    </TD>
    <TD>1    </TD>
    <TD>10:Q9BQ99      </TD>
  </TR>
  <TR>
    <TD>IFVGGINPEATEEK    </TD>
    <TD>62.15    </TD>
    <TD>84    </TD>
    <TD>2    </TD>
    <TD>23:PC4375      </TD>
  </TR>
  <TR>
    <TD>QLYQILTDFDIR    </TD>
    <TD>63.62    </TD>
    <TD>87    </TD>
    <TD>1    </TD>
    <TD>12:B38611  14:B35838      </TD>
  </TR>
  <TR>
    <TD>GTDVNVFNTILTTR    </TD>
    <TD>71.62    </TD>
    <TD>93    </TD>
    <TD>1    </TD>
    <TD>1:LUHU  3:AAB19866      </TD>
  </TR>
  <TR>
    <TD>SDSEKLNLDSIIGR    </TD>
    <TD>58.2    </TD>
    <TD>96    </TD>
    <TD>1    </TD>
    <TD>39:Q9Z1G2      </TD>
  </TR>
  <TR>
    <TD>DSCQGDSGGPVVCSGK    </TD>
    <TD>71.13    </TD>
    <TD>97    </TD>
    <TD>1    </TD>
    <TD>4:TRBOTR  6:1NTP      </TD>
  </TR>
  <TR>
    <TD>DLAKDITSDTSGDFR    </TD>
    <TD>57.65    </TD>
    <TD>99    </TD>
    <TD>1    </TD>
    <TD>1:LUHU  3:AAB19866  7:ANX1_MOUSE      </TD>
  </TR>
  <TR>
    <TD>GLGTDEDTLIEILASR    </TD>
    <TD>87.32    </TD>
    <TD>103    </TD>
    <TD>1    </TD>
    <TD>1:LUHU  5:AAC78495      </TD>
  </TR>
  <TR>
    <TD>GAGTEEACLIDILASR    </TD>
    <TD>54.48    </TD>
    <TD>103    </TD>
    <TD>2    </TD>
    <TD>33:O93444      </TD>
  </TR>
  <TR>
    <TD>SEDFGVNEDLADSDAR    </TD>
    <TD>103.46    </TD>
    <TD>105    </TD>
    <TD>1    </TD>
    <TD>1:LUHU      </TD>
  </TR>
  <TR>
    <TD>LISWYDNEFGYSNR    </TD>
    <TD>58.42    </TD>
    <TD>107    </TD>
    <TD>1    </TD>
    <TD>28:DEHUG3  30:AAC16069      </TD>
  </TR>
  <TR>
    <TD>LVTWYDNEFGYSNR    </TD>
    <TD>57.61    </TD>
    <TD>107    </TD>
    <TD>2    </TD>
    <TD>37:Q90Z48      </TD>
  </TR>
  <TR>
    <TD>TPALVFEYINNTDFK    </TD>
    <TD>69.27    </TD>
    <TD>108    </TD>
    <TD>1    </TD>
    <TD>12:B38611  14:B35838      </TD>
  </TR>
  <TR>
    <TD>IFVGGLNPEATEEKIR    </TD>
    <TD>54.63    </TD>
    <TD>109    </TD>
    <TD>1    </TD>
    <TD>10:Q9BQ99      </TD>
  </TR>
  <TR>
    <TD>IFVGGINPEATEEKIR    </TD>
    <TD>54.63    </TD>
    <TD>109    </TD>
    <TD>2    </TD>
    <TD>23:PC4375      </TD>
  </TR>
  <TR>
    <TD>VGAVAGNDWLIWDITR    </TD>
    <TD>63.06    </TD>
    <TD>113    </TD>
    <TD>1    </TD>
    <TD>35:Q9H644      </TD>
  </TR>
  <TR>
    <TD>VGAVAGNDWIIWDITR    </TD>
    <TD>63.06    </TD>
    <TD>113    </TD>
    <TD>2    </TD>
    <TD>32:Q9CWU9      </TD>
  </TR>
  <TR>
    <TD>LFIGGLSFETTDESLR    </TD>
    <TD>61.89    </TD>
    <TD>117    </TD>
    <TD>1    </TD>
    <TD>25:1HA11      </TD>
  </TR>
  <TR>
    <TD>LFIGGLSFETTEESLR    </TD>
    <TD>61.89    </TD>
    <TD>117    </TD>
    <TD>2    </TD>
    <TD>8:AAC26867  21:S40776      </TD>
  </TR>
  <TR>
    <TD>LFIGGLSFETTDDSLR    </TD>
    <TD>61.89    </TD>
    <TD>117    </TD>
    <TD>3    </TD>
    <TD>26:Q9CRI0      </TD>
  </TR>
  <TR>
    <TD>MTDQEAIQDLWQWR    </TD>
    <TD>58.31    </TD>
    <TD>118    </TD>
    <TD>1    </TD>
    <TD>9:Q96AT6      </TD>
  </TR>
  <TR>
    <TD>GFSEGLWEIENNPTVK    </TD>
    <TD>54.12    </TD>
    <TD>119    </TD>
    <TD>1    </TD>
    <TD>24:Q9XSK7      </TD>
  </TR>
  <TR>
    <TD>QAWFIENEEQEYVQTVK    </TD>
    <TD>71.47    </TD>
    <TD>132    </TD>
    <TD>1    </TD>
    <TD>1:LUHU      </TD>
  </TR>
  <TR>
    <TD>LGEDNINVVEGNEQFISASK    </TD>
    <TD>83.36    </TD>
    <TD>134    </TD>
    <TD>1    </TD>
    <TD>4:TRBOTR  6:1NTP      </TD>
  </TR>
  <TR>
    <TD>MSVQPTVSLGGFEITPPVVLR    </TD>
    <TD>81.19    </TD>
    <TD>140    </TD>
    <TD>1    </TD>
    <TD>9:Q96AT6      </TD>
  </TR>
  <TR>
    <TD>GGPGSAVSPYPTFNPSSDVAALHK    </TD>
    <TD>64.58    </TD>
    <TD>149    </TD>
    <TD>1    </TD>
    <TD>1:LUHU      </TD>
  </TR>
</TABLE>
*/

Copyright © 2022 Matrix Science Ltd.  All Rights Reserved. Generated on Thu Mar 31 2022 01:12:29