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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: blast_options_handle.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/04/12 17:46:21  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.13
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef ALGO_BLAST_API___BLAST_OPTIONS_HANDLE__HPP
  10. #define ALGO_BLAST_API___BLAST_OPTIONS_HANDLE__HPP
  11. /*  $Id: blast_options_handle.hpp,v 1000.1 2004/04/12 17:46:21 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Authors:  Christiam Camacho
  37.  *
  38.  */
  39. /// @file blast_options_handle.hpp
  40. /// Declares the CBlastOptionsHandle and CBlastOptionsFactory classes.
  41. #include <algo/blast/api/blast_options.hpp>
  42. /** @addtogroup AlgoBlast
  43.  *
  44.  * @{
  45.  */
  46. BEGIN_NCBI_SCOPE
  47. BEGIN_SCOPE(blast)
  48. class CBlastException;
  49. class CBlastOptionsHandle;
  50. /** 
  51. * Creates BlastOptionsHandle objects with default values for the 
  52. * programs/tasks requested.
  53. *
  54. * Concrete factory to create various properly configured BLAST options 
  55. * objects with default values, given a program (or task). 
  56. *
  57. * Example:
  58. * @code
  59. * ...
  60. * CRef<CBlastOptionsHandle> opts(CBlastOptionsFactory::Create(eBlastn));
  61. * CBl2Seq blaster(query, subject, *opts);
  62. * TSeqAlignVector results = blaster.Run();
  63. * ...
  64. * opts.Reset(CBlastOptionsFactory::Create(eMegablast));
  65. * blaster.SetOptionsHandle() = *opts;
  66. * results = blaster.Run();
  67. * ...
  68. * opts.Reset(CBlastOptionsFactory::Create(eDiscMegablast));
  69. * blaster.SetOptionsHandle() = *opts;
  70. * results = blaster.Run();
  71. * ...
  72. * @endcode
  73. */
  74. class NCBI_XBLAST_EXPORT CBlastOptionsFactory
  75. {
  76. public:
  77.     typedef CBlastOptions::EAPILocality EAPILocality;
  78.     
  79.     static CBlastOptionsHandle* Create(EProgram program, EAPILocality locality = CBlastOptions::eLocal)
  80.         THROWS((CBlastException));
  81. private:
  82.     CBlastOptionsFactory();
  83. };
  84. /// Handle to the options to the BLAST algorithm.
  85. ///
  86. /// This abstract base class only defines those options that are truly 
  87. /// "universal" BLAST options (they apply to all flavors of BLAST).
  88. /// Derived classes define options that are applicable only to those programs
  89. /// whose options they manipulate.
  90. class NCBI_XBLAST_EXPORT CBlastOptionsHandle : public CObject
  91. {
  92. public:
  93.     typedef CBlastOptions::EAPILocality EAPILocality;
  94.     
  95.     CBlastOptionsHandle(EAPILocality locality);
  96.     
  97.     /// Return the object which this object is a handle for.
  98.     ///
  99.     /// Assumes user knows exactly how to set the individual options 
  100.     /// correctly.
  101.     const CBlastOptions& GetOptions() const { return *m_Opts; }
  102.     CBlastOptions& SetOptions() { return *m_Opts; }
  103.     
  104.     /// Resets the state of the object to all default values.
  105.     /// This is a template method (design pattern).
  106.     virtual void SetDefaults();
  107.     
  108.     /// Returns true if this object needs default values set.
  109.     void DoneDefaults() { m_Opts->DoneDefaults(); }
  110.     
  111.     /******************* Lookup table options ***********************/
  112.     int GetAlphabetSize() const { return m_Opts->GetAlphabetSize(); }
  113.     void SetAlphabetSize(int asz) { m_Opts->SetAlphabetSize(asz); }
  114.     /******************* Query setup options ************************/
  115.     const char* GetFilterString() const { return m_Opts->GetFilterString(); }
  116.     void SetFilterString(const char* f) { m_Opts->SetFilterString(f); }
  117.     /******************* Gapped extension options *******************/
  118.     double GetGapXDropoff() const { return m_Opts->GetGapXDropoff(); }
  119.     void SetGapXDropoff(double x) { m_Opts->SetGapXDropoff(x); }
  120.     double GetGapTrigger() const { return m_Opts->GetGapTrigger(); }
  121.     void SetGapTrigger(double g) { m_Opts->SetGapTrigger(g); }
  122.     /******************* Hit saving options *************************/
  123.     int GetHitlistSize() const { return m_Opts->GetHitlistSize(); }
  124.     void SetHitlistSize(int s) { m_Opts->SetHitlistSize(s); }
  125.     int GetPrelimHitlistSize() const { return m_Opts->GetPrelimHitlistSize(); }
  126.     void SetPrelimHitlistSize(int s) { m_Opts->SetPrelimHitlistSize(s); }
  127.     int GetMaxNumHspPerSequence() const { 
  128.         return m_Opts->GetMaxNumHspPerSequence();
  129.     }
  130.     void SetMaxNumHspPerSequence(int m) { m_Opts->SetMaxNumHspPerSequence(m); }
  131.     // These 2 are never set in core... should they be removed?
  132.     int GetTotalHspLimit() const { return m_Opts->GetTotalHspLimit(); }
  133.     void SetTotalHspLimit(int l) { m_Opts->SetTotalHspLimit(l); }
  134.     double GetEvalueThreshold() const { return m_Opts->GetEvalueThreshold(); }
  135.     void SetEvalueThreshold(double eval) { m_Opts->SetEvalueThreshold(eval); } 
  136.     int GetCutoffScore() const { return m_Opts->GetCutoffScore(); }
  137.     void SetCutoffScore(int s) { m_Opts->SetCutoffScore(s); }
  138.     double GetPercentIdentity() const { return m_Opts->GetPercentIdentity(); }
  139.     void SetPercentIdentity(double p) { m_Opts->SetPercentIdentity(p); }
  140.     bool GetGappedMode() const { return m_Opts->GetGappedMode(); }
  141.     void SetGappedMode(bool m = true) { m_Opts->SetGappedMode(m); }
  142.     /******************** Database (subject) options *******************/
  143.     Int8 GetDbLength() const { return m_Opts->GetDbLength(); }
  144.     void SetDbLength(Int8 len) { m_Opts->SetDbLength(len); }
  145.     unsigned int GetDbSeqNum() const { return m_Opts->GetDbSeqNum(); }
  146.     void SetDbSeqNum(unsigned int num) { m_Opts->SetDbSeqNum(num); }
  147. protected:
  148.     /// Data type this class controls access to
  149.     CRef<CBlastOptions> m_Opts;
  150.     // These methods make up the template method
  151.     virtual void SetLookupTableDefaults() = 0;
  152.     virtual void SetQueryOptionDefaults() = 0;
  153.     virtual void SetInitialWordOptionsDefaults() = 0;
  154.     virtual void SetGappedExtensionDefaults() = 0;
  155.     virtual void SetScoringOptionsDefaults() = 0;
  156.     virtual void SetHitSavingOptionsDefaults() = 0;
  157.     virtual void SetEffectiveLengthsOptionsDefaults() = 0;
  158.     virtual void SetSubjectSequenceOptionsDefaults() = 0;
  159. };
  160. END_SCOPE(blast)
  161. END_NCBI_SCOPE
  162. /* @} */
  163. /*
  164.  * ===========================================================================
  165.  * $Log: blast_options_handle.hpp,v $
  166.  * Revision 1000.1  2004/04/12 17:46:21  gouriano
  167.  * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.13
  168.  *
  169.  * Revision 1.13  2004/03/25 17:24:49  camacho
  170.  * Minor change in sample code
  171.  *
  172.  * Revision 1.12  2004/03/25 17:18:44  camacho
  173.  * Update documentation
  174.  *
  175.  * Revision 1.11  2004/03/19 18:56:04  camacho
  176.  * Move to doxygen AlgoBlast group
  177.  *
  178.  * Revision 1.10  2004/03/19 14:53:24  camacho
  179.  * Move to doxygen group AlgoBlast
  180.  *
  181.  * Revision 1.9  2004/03/10 14:54:39  madden
  182.  * Remove methods for get/set matrix, matrix-path, gap-opening, gap-extension (moved up to next class)
  183.  *
  184.  * Revision 1.8  2004/02/18 23:47:56  dondosha
  185.  * Uncommented [SG]etTotalHspLimit, as they will now be used
  186.  *
  187.  * Revision 1.7  2004/02/17 23:52:08  dondosha
  188.  * Added methods to get/set preliminary hitlist size
  189.  *
  190.  * Revision 1.6  2004/02/03 21:30:20  camacho
  191.  * Follow consistent use of doxygen tags
  192.  *
  193.  * Revision 1.5  2004/01/16 20:45:31  bealer
  194.  * - Add locality flag and DoneDefaults() method.
  195.  *
  196.  * Revision 1.4  2003/12/15 23:41:35  dondosha
  197.  * Added [gs]etters of database (subject) length and number of sequences to general options handle
  198.  *
  199.  * Revision 1.3  2003/12/09 12:40:22  camacho
  200.  * Added windows export specifiers
  201.  *
  202.  * Revision 1.2  2003/11/26 18:36:44  camacho
  203.  * Renaming blast_option*pp -> blast_options*pp
  204.  *
  205.  * Revision 1.1  2003/11/26 18:22:15  camacho
  206.  * +Blast Option Handle classes
  207.  *
  208.  * ===========================================================================
  209.  */
  210. #endif  /* ALGO_BLAST_API___BLAST_OPTIONS_HANDLE__HPP */