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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: remote_blast_demo.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 18:06:51  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: remote_blast_demo.cpp,v 1000.1 2004/06/01 18:06:51 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:  Kevin Bealer
  35.  *
  36.  */
  37. /// @file demo/remote_blast_demo.cpp
  38. /// Example program for remote_blast C++ interface
  39. #include <ncbi_pch.hpp>
  40. #include "queue_poll.hpp"
  41. #include "align_parms.hpp"
  42. #include "search_opts.hpp"
  43. #include <connect/ncbi_core_cxx.hpp>
  44. #include <corelib/ncbiapp.hpp>
  45. //  Remote Blast Demo App
  46. USING_NCBI_SCOPE;
  47. class CRemote_blastApplication : public CNcbiApplication
  48. {
  49. public:
  50.     virtual void Init(void);
  51.     virtual int  Run (void);
  52.     
  53. private:
  54.     auto_ptr<CArgDescriptions> m_ArgDesc;
  55.     
  56.     void x_AddRemoteBlastKeys(void);
  57. };
  58. // Builds interface elements specific to this program
  59. void CRemote_blastApplication::x_AddRemoteBlastKeys(void)
  60. {
  61.     // Program, Service, and Algorithm Selection options
  62.     
  63.     m_ArgDesc.reset(new CArgDescriptions);
  64.     
  65.     m_ArgDesc->AddDefaultKey("program", "ProgramName",
  66.                             "Program type (blastn, blastp, blastx, tblastn, "
  67.                             "tblastx) (Default is blastp.)",
  68.                             CArgDescriptions::eString,
  69.                             "blastp");
  70.     m_ArgDesc->AddDefaultKey("service", "ServiceType",
  71.                             "Service Type (default 'plain').",
  72.                             CArgDescriptions::eString,
  73.                             "plain");
  74.     m_ArgDesc->AddFlag("megablast", "Use MegaBlast algorithm.");
  75.     
  76.     
  77.     // Input and Output
  78.     
  79.     m_ArgDesc->AddDefaultKey("believedef", "BelieveDef",
  80.                             "Believe the query defline default is false).",
  81.                             CArgDescriptions::eBoolean,
  82.                             "F");
  83.     m_ArgDesc->AddKey       ("infile", "InputFilename",
  84.                              "Filename of input query.",
  85.                              CArgDescriptions::eInputFile);
  86.     m_ArgDesc->AddDefaultKey("outputasn", "AsnOutput",
  87.                             "Output raw ASN.1 objects.",
  88.                             CArgDescriptions::eBoolean,
  89.                             "F");
  90.     m_ArgDesc->AddFlag("async_mode", "Return request-id or status immediately.");
  91.     m_ArgDesc->AddOptionalKey("get_results",
  92.                               "GetResults",
  93.                               "Get results for the specified request-id",
  94.                               CArgDescriptions::eString);
  95.     
  96.     
  97.     // Domain Options
  98.     
  99.     m_ArgDesc->AddDefaultKey("db", "DatabaseName",
  100.                             "Database name. (Default is nr.)",
  101.                             CArgDescriptions::eString,
  102.                             "nr");
  103.     m_ArgDesc->AddFlag("apitrace", "Show method calls to the Blast API.");
  104.     
  105.     
  106.     // Verbose debugging option - dumps information about network
  107.     // traffic and text ASN.1 of transmitted objects.
  108.     
  109.     m_ArgDesc->AddFlag("verbose", "Verbose (debug) output.");
  110. }
  111. void CRemote_blastApplication::Init(void)
  112. {
  113.     // Keys specific to remote blast
  114.     x_AddRemoteBlastKeys();
  115.     
  116.     // Algorithm & Domain Options
  117.     CNetblastSearchOpts::CreateInterface(* m_ArgDesc.get());
  118.     
  119.     // Program description
  120.     string prog_description = "remote_blastn";
  121.     
  122.     m_ArgDesc->SetUsageContext(GetArguments().GetProgramBasename(),
  123.                                prog_description,
  124.                                false);
  125.     
  126.     // Pass argument descriptions to the application
  127.     SetupArgDescriptions(m_ArgDesc.release());
  128. }
  129. // If the service type is "plain", this adjusts the service.  It
  130. // should be expanded in the future to deal with PSI blast, RPS
  131. // (possibly), and other useful bits and pieces.
  132. // 
  133. // 1. If phi_query is specified, service = "phi".
  134. // 2. If megablast is specified, service = "megablast".
  135. void s_SetService(string & service, string & /*program*/, const CArgs & args)
  136. {
  137.     int phi_supported = 0;
  138.     
  139.     if (service == "plain") {
  140.         if (phi_supported && args["phi_query"].HasValue()) {
  141.             service = "phi";
  142.         } else if (args["megablast"]) {
  143.             service = "megablast";
  144.         }
  145.     }
  146. }
  147. int CRemote_blastApplication::Run(void)
  148. {
  149.     // Setup application registry, error log, and MT-lock for CONNECT library
  150.     
  151.     CONNECT_Init(&GetConfig());
  152.     
  153.     // Process cmd line args
  154.     
  155.     const CArgs & args = GetArgs();
  156.     
  157.     // These options are remote_blast program options - and are not
  158.     // passed on to the server, as such.
  159.     
  160.     CNcbiIstream & query_in(args["infile"]. AsInputFile());
  161.     
  162.     bool verbose(false);
  163.     
  164.     verbose = args["verbose"];
  165.     
  166.     // These parameters are required to queue the search - any default
  167.     // values are supplied locally.
  168.     
  169.     string program       = args["program"]    .AsString();
  170.     string database      = args["db"]         .AsString();
  171.     string service       = args["service"]    .AsString();
  172.     bool   trust_defline = args["believedef"] .AsBoolean();
  173.     
  174.     bool   raw_asn       = args["outputasn"]  .AsBoolean();
  175.     trace_blast_api      = args["apitrace"];
  176.     
  177.     bool   async_mode    = args["async_mode"];
  178.     
  179.     
  180.     // Workaround for formatting problem.
  181.     if (program == "tblastx") {
  182.         raw_asn = true;
  183.     }
  184.     
  185.     string get_RID;
  186.     
  187.     if (args["get_results"].HasValue()) {
  188.         get_RID = args["get_results"].AsString();
  189.     }
  190.     
  191.     s_SetService(service, program, args);
  192.     
  193.     // These parameters are optional when queueing the search, and can
  194.     // take server-specified defaults.
  195.     
  196.     // NOTE that anything added here should be defined above using 
  197.     // AddOptionalKey() not AddDefaultKey().
  198.     
  199.     CNetblastSearchOpts opts(args);
  200.     
  201.     CAlignParms alparms;
  202.     
  203.     alparms.SetNumAlgn(opts.NumAligns());
  204.     
  205.     return QueueAndPoll(program,
  206.                         service,
  207.                         database,
  208.                         opts,
  209.                         query_in,
  210.                         verbose,
  211.                         trust_defline,
  212.                         raw_asn,
  213.                         alparms,
  214.                         async_mode,
  215.                         get_RID);
  216. }
  217. int main(int argc, const char* argv[])
  218. {
  219.     return CRemote_blastApplication().AppMain(argc, argv, 0, eDS_Default, 0);
  220. }
  221. /*
  222.  * ===========================================================================
  223.  * $Log: remote_blast_demo.cpp,v $
  224.  * Revision 1000.1  2004/06/01 18:06:51  gouriano
  225.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2
  226.  *
  227.  * Revision 1.2  2004/05/21 21:41:03  gorelenk
  228.  * Added PCH ncbi_pch.hpp
  229.  *
  230.  * Revision 1.1  2004/04/20 15:42:23  bealer
  231.  * - Change name of remote_blast.cpp to avoid doxygen and gdb issues.
  232.  *
  233.  * Revision 1.8  2004/04/19 14:37:52  bealer
  234.  * - Fix compiler warnings.
  235.  *
  236.  * Revision 1.7  2004/04/12 14:59:29  ucko
  237.  * Don't redeclare trace_blast_api.  (search_opts.hpp already declares it.)
  238.  *
  239.  * Revision 1.6  2004/03/23 14:11:04  camacho
  240.  * Minor doxygen fix
  241.  *
  242.  * Revision 1.5  2004/03/22 20:46:22  bealer
  243.  * - Fix non-literate comments to look less like doxygen comments.
  244.  *
  245.  * Revision 1.4  2004/03/18 13:49:04  camacho
  246.  * Correct use of namespaces
  247.  *
  248.  * Revision 1.3  2004/03/16 19:41:03  vasilche
  249.  * Namespace qualifier is invalid in extern declaration
  250.  *
  251.  * Revision 1.2  2004/02/18 16:53:19  bealer
  252.  * - Adapt source from blast_client to Remote Blast API.
  253.  *
  254.  * ===========================================================================
  255.  */