test_scoremat.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:6k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: test_scoremat.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:42:30  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: test_scoremat.cpp,v 1000.1 2004/06/01 19:42:30 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Authors:  Aaron Ucko
  35.  *
  36.  * File Description:
  37.  *   Test of low-level score matrix support
  38.  *
  39.  */
  40. #include <ncbi_pch.hpp>
  41. #include <corelib/ncbiapp.hpp>
  42. #include <util/tables/raw_scoremat.h>
  43. #include <ctype.h>
  44. #include <test/test_assert.h>  /* This header must go last */
  45. USING_NCBI_SCOPE;
  46. class CSMTestApplication : public CNcbiApplication
  47. {
  48. private:
  49.     void Init(void);
  50.     int  Run(void);
  51. };
  52. void CSMTestApplication::Init(void)
  53. {
  54.     auto_ptr<CArgDescriptions> arg_desc(new CArgDescriptions);
  55.     arg_desc->SetUsageContext(GetArguments().GetProgramBasename(),
  56.                               "score matrix test program");
  57.     arg_desc->AddDefaultKey("sm", "matrix", "name of score matrix to use",
  58.                             CArgDescriptions::eString, "blosum62");
  59.     arg_desc->SetConstraint
  60.         ("sm", &(*new CArgAllow_Strings,
  61.                  "blosum45", "blosum62", "blosum80", "pam30", "pam70"));
  62.     arg_desc->AddFlag("dump", "dump whole matrix");
  63.     arg_desc->AddOptionalKey
  64.         ("aa1", "AA",
  65.          "first amino acid (may be a symbol or an NCBIstdaa number)",
  66.          CArgDescriptions::eString);
  67.     arg_desc->AddOptionalKey
  68.         ("aa2", "AA", "second amino acid", CArgDescriptions::eString);
  69.     SetupArgDescriptions(arg_desc.release());
  70. }
  71. inline static string s_FormatAA(int aa) {
  72.     return isprint(aa) ? string(1, (char)aa) : NStr::IntToString(aa);
  73. }
  74. inline static int s_ParseAA(string aa) {
  75.     return isdigit(aa[0]) ? NStr::StringToInt(aa) : aa[0];
  76. }
  77. static void s_Dump(const SNCBIPackedScoreMatrix& psm,
  78.                    SNCBIFullScoreMatrix& fsm)
  79. {
  80. #if 1
  81.     cout << "Packed:nn ";
  82.     {{
  83.         int l = strlen(psm.symbols);
  84.         for (int i = 0;  i < l;  ++i) {
  85.             cout << "  " << psm.symbols[i];
  86.         }
  87.         cout << 'n';
  88.         for (int i = 0;  i < l;  ++i) {
  89.             cout << psm.symbols[i];
  90.             for (int j = 0;  j < l;  ++j) {
  91.                 cout << setw(3) << (int)psm.scores[i * l + j];
  92.             }
  93.             cout << 'n';
  94.         }
  95.     }}
  96. #else
  97.     cout << "Packed:nn  " << psm.symbols << "nn";
  98.     {{
  99.         int l = strlen(psm.symbols);
  100.         for (int i = 0;  i < l;  ++i) {
  101.             cout << psm.symbols[i] << ' ';
  102.             for (int j = 0;  j < l;  ++j) {
  103.                 cout << char(psm.scores[i * l + j] + '0');
  104.             }
  105.             cout << 'n';
  106.         }
  107.     }}
  108. #endif
  109.     cout << endl;
  110.     cout << "Unpacked:nn    ";
  111.     for (int i = 0;  i < NCBI_FSM_DIM;  ++i) {
  112.         if (fsm.s[i][i] != psm.defscore) {
  113.             string s = s_FormatAA(i);
  114.             cout << s[s.length() - 1];
  115.         }
  116.     }
  117.     cout << 'n';
  118.     for (int i = 0;  i < NCBI_FSM_DIM;  ++i) {
  119.         if (fsm.s[i][i] != psm.defscore) {
  120.             // The use of c_str() here is to work around a GCC 2.95 bug.
  121.             cout << setw(3) << s_FormatAA(i).c_str() << ' ';
  122.             for (int j = 0;  j < NCBI_FSM_DIM;  ++j) {
  123.                 if (fsm.s[j][j] != psm.defscore) {
  124.                     cout << char(fsm.s[i][j] + '0');
  125.                 }
  126.             }
  127.             cout << 'n';
  128.         }
  129.     }
  130. }
  131. int CSMTestApplication::Run(void)
  132. {
  133.     CArgs                          args = GetArgs();
  134.     string                         sm   = args["sm"].AsString();
  135.     const SNCBIPackedScoreMatrix*  psm;
  136.     auto_ptr<SNCBIFullScoreMatrix> fsm(new SNCBIFullScoreMatrix);
  137.     if        (sm == "blosum45") {
  138.         psm = &NCBISM_Blosum45;
  139.     } else if (sm == "blosum62") {
  140.         psm = &NCBISM_Blosum62;
  141.     } else if (sm == "blosum80") {
  142.         psm = &NCBISM_Blosum80;
  143.     } else if (sm == "pam30") {
  144.         psm = &NCBISM_Pam30;
  145.     } else if (sm == "pam70") {
  146.         psm = &NCBISM_Pam70;
  147.     } else {
  148.         _TROUBLE;
  149.     }
  150.     NCBISM_Unpack(psm, fsm.get());
  151.     if (args["dump"]) {
  152.         s_Dump(*psm, *fsm);
  153.     }
  154.     if (args["aa1"]  &&  args["aa2"]) {
  155.         int aa1 = s_ParseAA(args["aa1"].AsString());
  156.         int aa2 = s_ParseAA(args["aa2"].AsString());
  157.         cout << "Packed:   " << (int)NCBISM_GetScore(psm, aa1, aa2) << endl;
  158.         cout << "Unpacked: " << (int)fsm->s[aa1][aa2] << endl;
  159.     }
  160.     return 0;
  161. }
  162. int main(int argc, const char* argv[])
  163. {
  164.     // Execute main application function
  165.     return CSMTestApplication().AppMain(argc, argv, 0, eDS_Default, 0);
  166. }
  167. /*
  168.  * ===========================================================================
  169.  *
  170.  * $Log: test_scoremat.cpp,v $
  171.  * Revision 1000.1  2004/06/01 19:42:30  gouriano
  172.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  173.  *
  174.  * Revision 1.3  2004/05/17 21:09:13  gorelenk
  175.  * Added include of PCH ncbi_pch.hpp
  176.  *
  177.  * Revision 1.2  2003/08/22 01:32:36  ucko
  178.  * Fix for GCC 2.95.
  179.  *
  180.  * Revision 1.1  2003/08/21 19:48:21  ucko
  181.  * Add tables library (shared with C) for raw score matrices, etc.
  182.  *
  183.  * ===========================================================================
  184.  */