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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: blast_client.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 18:27:24  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: blast_client.cpp,v 1000.1 2004/06/01 18:27:24 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.  * Author:  Kevin Bealer
  35.  *
  36.  * File Description:
  37.  *   Demo of using the C++ Object Manager (OM)
  38.  *
  39.  */
  40. #include <ncbi_pch.hpp>
  41. #include "queue_poll.hpp"
  42. #include <connect/ncbi_core_cxx.hpp>
  43. #include <corelib/ncbiapp.hpp>
  44. using namespace ncbi;
  45. /////////////////////////////////////////////////////////////////////////////
  46. //
  47. //  Demo application
  48. //
  49. class CBlast_clientApplication : public CNcbiApplication
  50. {
  51. public:
  52.     virtual void Init(void);
  53.     virtual int  Run (void);
  54. };
  55. void CBlast_clientApplication::Init(void)
  56. {
  57.     // Prepare command line descriptions
  58.     
  59.     auto_ptr<CArgDescriptions> arg_desc(new CArgDescriptions);
  60.     arg_desc->AddDefaultKey("program", "ProgramName",
  61.                             "Program type (blastn, blastp, blastx, tblastn, "
  62.                             "tblastx) (Default is blastp.)",
  63.                             CArgDescriptions::eString,
  64.                             "blastp");
  65.     
  66.     arg_desc->AddDefaultKey("service", "ServiceType",
  67.                             "Service Type (default 'plain').",
  68.                             CArgDescriptions::eString,
  69.                             "plain");
  70.     
  71.     arg_desc->AddDefaultKey("db", "DatabaseName",
  72.                             "Database name. (Default is nr.)",
  73.                             CArgDescriptions::eString,
  74.                             "nr");
  75.     
  76.     arg_desc->AddDefaultKey("believedef", "BelieveDef",
  77.                             "Believe the query defline default is false).",
  78.                             CArgDescriptions::eBoolean,
  79.                             "F");
  80.     
  81.     arg_desc->AddKey("infile", "InputFilename",
  82.                      "Filename of input query.",
  83.                      CArgDescriptions::eInputFile);
  84.     
  85.     arg_desc->AddFlag("verbose", "Verbose (debug) output.");
  86.     
  87.     arg_desc->AddFlag("megablast", "Use MegaBlast algorithm.");
  88.     
  89.     arg_desc->AddDefaultKey("outputasn", "AsnOutput",
  90.                             "Output raw ASN.1 objects.",
  91.                             CArgDescriptions::eBoolean,
  92.                             "F");
  93.     
  94.     
  95.     //arg_desc->AddOptionalKey("E", "ExpectValue",
  96.     //                         "Expect value (cutoff).",
  97.     //                         CArgDescriptions::eDouble);
  98.     
  99.     CNetblastSearchOpts::CreateInterface(*arg_desc);
  100.     
  101.     // Program description
  102.     string prog_description = "blast_clientn";
  103.     
  104.     arg_desc->SetUsageContext(GetArguments().GetProgramBasename(),
  105.                               prog_description, false);
  106.     
  107.     // Pass argument descriptions to the application
  108.     //
  109.     
  110.     SetupArgDescriptions(arg_desc.release());
  111. }
  112. // If the service type is "plain", this adjusts the service using the
  113. // following rules:
  114. // 1. If phi_query is specified, service = "phi"
  115. //
  116. void s_SetService(string & service, string & /*program*/, const CArgs & args)
  117. {
  118.     if (service == "plain") {
  119.         if (args["phi_query"].HasValue()) {
  120.             service = "phi";
  121.         } else if (args["megablast"]) {
  122.             service = "megablast";
  123.         }
  124.     }
  125. }
  126. int CBlast_clientApplication::Run(void)
  127. {
  128.     // Setup application registry, error log, and MT-lock for CONNECT library
  129.     
  130.     CONNECT_Init(&GetConfig());
  131.     
  132.     // Process cmd line args
  133.     
  134.     const CArgs & args = GetArgs();
  135.     
  136.     // These options are blast_client program options - and are not passed
  137.     // on to the server, as such.
  138.     
  139.     CNcbiIstream & query_in(args["infile"]. AsInputFile());
  140.     bool           verbose (args["verbose"]);
  141.     
  142.     // These parameters are required to queue the search - any default
  143.     // values are supplied locally.
  144.     
  145.     string program       = args["program"]   .AsString();
  146.     string database      = args["db"]        .AsString();
  147.     string service       = args["service"]   .AsString();
  148.     bool   trust_defline = args["believedef"].AsBoolean();
  149.     
  150.     bool   raw_asn       = args["outputasn"] .AsBoolean();
  151.     
  152.     s_SetService(service, program, args);
  153.     
  154.     // These parameters are optional when queueing the search, and can
  155.     // take server-specified defaults.
  156.     
  157.     // NOTE that anything added here should be defined above using 
  158.     // AddOptionalKey() not AddDefaultKey().
  159.     
  160.     CNetblastSearchOpts opts(args);
  161.     
  162.     CAlignParms alparms;
  163.     
  164.     alparms.SetNumAlgn(opts.NumAligns());
  165.     //alparms.SetNumDesc(opts.NumDesc());
  166.     
  167.     return QueueAndPoll(program,
  168.                         database,
  169.                         service,
  170.                         opts,
  171.                         query_in,
  172.                         verbose,
  173.                         trust_defline,
  174.                         raw_asn,
  175.                         alparms);
  176. }
  177. /////////////////////////////////////////////////////////////////////////////
  178. //  MAIN
  179. int main(int argc, const char* argv[])
  180. {
  181.     return CBlast_clientApplication().AppMain(argc, argv, 0, eDS_Default, 0);
  182. }
  183. /*
  184.  * ===========================================================================
  185.  *
  186.  * $Log: blast_client.cpp,v $
  187.  * Revision 1000.1  2004/06/01 18:27:24  gouriano
  188.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  189.  *
  190.  * Revision 1.3  2004/05/21 21:41:38  gorelenk
  191.  * Added PCH ncbi_pch.hpp
  192.  *
  193.  * Revision 1.2  2003/09/26 20:01:13  bealer
  194.  * - Fix compile warning.
  195.  *
  196.  * Revision 1.1  2003/09/26 16:53:49  bealer
  197.  * - Add blast_client project for netblast protocol, initial code commit.
  198.  *
  199.  * ===========================================================================
  200.  */