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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: blast_options.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 18:02:42  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.61
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: blast_options.hpp,v 1000.2 2004/06/01 18:02:42 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:  Christiam Camacho
  35.  *
  36.  */
  37. /** @file blast_options.hpp
  38.  * Class to encapsulate all NewBlast options
  39.  */
  40. #ifndef ALGO_BLAST_API___BLAST_OPTION__HPP
  41. #define ALGO_BLAST_API___BLAST_OPTION__HPP
  42. #include <objects/blast/Blast4_value.hpp>
  43. #include <objects/blast/Blast4_parameter.hpp>
  44. #include <objects/blast/Blast4_parameters.hpp>
  45. #include <objects/blast/Blast4_queue_search_reques.hpp>
  46. #include <algo/blast/api/blast_aux.hpp>
  47. #include <algo/blast/api/blast_exception.hpp>
  48. #include <algo/blast/core/blast_options.h>
  49. // Forward declaration of a unit test class
  50. class CBlastGapAlignTest;
  51. class CBlastDbTest;
  52. class CBlastTraceBackTest; 
  53. class CScoreBlkTest; 
  54. class CRPSTest; 
  55. class CBlastRedoAlignmentTest; 
  56. /** @addtogroup AlgoBlast
  57.  *
  58.  * @{
  59.  */
  60. BEGIN_NCBI_SCOPE
  61. BEGIN_SCOPE(objects)
  62.     class CSeq_loc;
  63. END_SCOPE(objects)
  64. BEGIN_SCOPE(blast)
  65. enum EBlastOptIdx {
  66.     eBlastOpt_Program = 100,
  67.     eBlastOpt_WordThreshold,
  68.     eBlastOpt_LookupTableType,
  69.     eBlastOpt_WordSize,
  70.     eBlastOpt_AlphabetSize,
  71.     eBlastOpt_ScanStep,
  72.     eBlastOpt_MBTemplateLength,
  73.     eBlastOpt_MBTemplateType,
  74.     eBlastOpt_MBMaxPositions,
  75.     eBlastOpt_FilterString,
  76.     eBlastOpt_StrandOption,
  77.     eBlastOpt_QueryGeneticCode,
  78.     eBlastOpt_WindowSize,
  79.     eBlastOpt_SeedContainerType,
  80.     eBlastOpt_SeedExtensionMethod,
  81.     eBlastOpt_VariableWordSize,
  82.     eBlastOpt_UngappedExtension,
  83.     eBlastOpt_XDropoff,
  84.     eBlastOpt_GapXDropoff,
  85.     eBlastOpt_GapXDropoffFinal,
  86.     eBlastOpt_GapTrigger,
  87.     eBlastOpt_GapExtnAlgorithm,
  88.     eBlastOpt_HitlistSize,
  89.     eBlastOpt_PrelimHitlistSize,
  90.     eBlastOpt_MaxNumHspPerSequence,
  91.     eBlastOpt_TotalHspLimit,
  92.     eBlastOpt_CullingMode,
  93.     eBlastOpt_RequiredStart,
  94.     eBlastOpt_RequiredEnd,
  95.     eBlastOpt_EvalueThreshold,
  96.     eBlastOpt_CutoffScore,
  97.     eBlastOpt_PercentIdentity,
  98.     eBlastOpt_SumStatisticsMode,
  99.     eBlastOpt_LongestIntronLength,
  100.     eBlastOpt_GappedMode,
  101.     eBlastOpt_NeighboringMode,
  102.     eBlastOpt_MatrixName,
  103.     eBlastOpt_MatrixPath,
  104.     eBlastOpt_MatchReward,
  105.     eBlastOpt_MismatchPenalty,
  106.     eBlastOpt_GapOpeningCost,
  107.     eBlastOpt_GapExtensionCost,
  108.     eBlastOpt_FrameShiftPenalty,
  109.     eBlastOpt_Decline2AlignPenalty,
  110.     eBlastOpt_OutOfFrameMode,
  111.     eBlastOpt_DbLength,
  112.     eBlastOpt_DbSeqNum,
  113.     eBlastOpt_EffectiveSearchSpace,
  114.     eBlastOpt_UseRealDbSize,
  115.     eBlastOpt_DbGeneticCode,
  116.     eBlastOpt_PHIPattern,
  117.     eBlastOpt_SkipTraceback,
  118.     eBlastOpt_InclusionThreshold,
  119.     eBlastOpt_PseudoCount,
  120.     eBlastOpt_GapTracebackAlgorithm
  121. };
  122. /// Encapsulates all blast input parameters
  123. class NCBI_XBLAST_EXPORT CBlastOptionsLocal : public CObject
  124. {
  125. public:
  126.     enum EAPILocality {
  127.         eLocal,
  128.         eRemote,
  129.         eBoth
  130.     };
  131.     
  132.     CBlastOptionsLocal();
  133.     ~CBlastOptionsLocal();
  134.     /// Validate the options
  135.     bool Validate() const;
  136.     /// Accessors/Mutators for individual options
  137.     
  138.     EProgram GetProgram() const;
  139.     void SetProgram(EProgram p);
  140.     /******************* Lookup table options ***********************/
  141.     int GetWordThreshold() const;
  142.     void SetWordThreshold(int w);
  143.     int GetLookupTableType() const;
  144.     void SetLookupTableType(int type);
  145.     short GetWordSize() const;
  146.     void SetWordSize(short ws);
  147.     int GetAlphabetSize() const;
  148.     void SetAlphabetSize(int s);
  149.     unsigned char GetScanStep() const;
  150.     void SetScanStep(unsigned char s);
  151.     /// Megablast only lookup table options
  152.     unsigned char GetMBTemplateLength() const;
  153.     void SetMBTemplateLength(unsigned char len);
  154.     unsigned char GetMBTemplateType() const;
  155.     void SetMBTemplateType(unsigned char type);
  156.     int GetMBMaxPositions() const;
  157.     void SetMBMaxPositions(int m);
  158.     /******************* Query setup options ************************/
  159.     const char* GetFilterString() const;
  160.     void SetFilterString(const char* f);
  161.     objects::ENa_strand GetStrandOption() const;
  162.     void SetStrandOption(objects::ENa_strand s);
  163.     int GetQueryGeneticCode() const;
  164.     void SetQueryGeneticCode(int gc);
  165.     /******************* Initial word options ***********************/
  166.     int GetWindowSize() const;
  167.     void SetWindowSize(int w);
  168.     SeedContainerType GetSeedContainerType() const;
  169.     void SetSeedContainerType(SeedContainerType type);
  170.     SeedExtensionMethod GetSeedExtensionMethod() const;
  171.     void SetSeedExtensionMethod(SeedExtensionMethod method);
  172.     bool GetVariableWordSize() const;
  173.     void SetVariableWordSize(bool val = true);
  174.     bool GetUngappedExtension() const;
  175.     void SetUngappedExtension(bool val = true);
  176.     double GetXDropoff() const;
  177.     void SetXDropoff(double x);
  178.     /******************* Gapped extension options *******************/
  179.     double GetGapXDropoff() const;
  180.     void SetGapXDropoff(double x);
  181.     double GetGapXDropoffFinal() const;
  182.     void SetGapXDropoffFinal(double x);
  183.     double GetGapTrigger() const;
  184.     void SetGapTrigger(double g);
  185.     EBlastPrelimGapExt GetGapExtnAlgorithm() const;
  186.     void SetGapExtnAlgorithm(EBlastPrelimGapExt a);
  187.     EBlastTbackExt GetGapTracebackAlgorithm() const;
  188.     void SetGapTracebackAlgorithm(EBlastTbackExt a);
  189.     void SetSkipTraceback(bool skip);
  190.     /******************* Hit saving options *************************/
  191.     int GetHitlistSize() const;
  192.     void SetHitlistSize(int s);
  193.     int GetPrelimHitlistSize() const;
  194.     void SetPrelimHitlistSize(int s);
  195.     int GetMaxNumHspPerSequence() const;
  196.     void SetMaxNumHspPerSequence(int m);
  197.     /// Maximum total number of HSPs to keep
  198.     int GetTotalHspLimit() const;
  199.     void SetTotalHspLimit(int l);
  200.     bool GetCullingMode() const;
  201.     void SetCullingMode(bool m = true);
  202.     /// Start of the region required to be part of the alignment
  203.     int GetRequiredStart() const;
  204.     void SetRequiredStart(int s);
  205.     /// End of the region required to be part of the alignment
  206.     int GetRequiredEnd() const;
  207.     void SetRequiredEnd(int e);
  208.     // Expect value cut-off threshold for an HSP, or a combined hit if sum
  209.     // statistics is used
  210.     double GetEvalueThreshold() const;
  211.     void SetEvalueThreshold(double eval);
  212.     double GetOriginalEvalue() const;
  213.     //void SetOriginalEvalue(double e);
  214.     // Raw score cutoff threshold
  215.     int GetCutoffScore() const;
  216.     void SetCutoffScore(int s);
  217.     double GetPercentIdentity() const;
  218.     void SetPercentIdentity(double p);
  219.     /// Sum statistics options
  220.     bool GetSumStatisticsMode() const;
  221.     void SetSumStatisticsMode(bool m = true);
  222.     int GetLongestIntronLength() const; // for tblastn w/ linking HSPs
  223.     void SetLongestIntronLength(int l); // for tblastn w/ linking HSPs
  224.     /// Returns true if gapped BLAST is set, false otherwise
  225.     bool GetGappedMode() const;
  226.     void SetGappedMode(bool m = true);
  227.     // Deprecated
  228.     bool GetNeighboringMode() const;
  229.     // Deprecated
  230.     void SetNeighboringMode(bool m = true);
  231.     /************************ Scoring options ************************/
  232.     const char* GetMatrixName() const;
  233.     void SetMatrixName(const char* matrix);
  234.     const char* GetMatrixPath() const;
  235.     void SetMatrixPath(const char* path);
  236.     int GetMatchReward() const;
  237.     void SetMatchReward(int r);         // r should be a positive integer
  238.     int GetMismatchPenalty() const;
  239.     void SetMismatchPenalty(int p);     // p should be a negative integer
  240.     int GetGapOpeningCost() const;
  241.     void SetGapOpeningCost(int g);      // g should be a positive integer
  242.     int GetGapExtensionCost() const;
  243.     void SetGapExtensionCost(int e);    // e should be a positive integer
  244.     int GetFrameShiftPenalty() const;
  245.     void SetFrameShiftPenalty(int p);
  246.     int GetDecline2AlignPenalty() const;
  247.     void SetDecline2AlignPenalty(int p);
  248.     bool GetOutOfFrameMode() const;
  249.     void SetOutOfFrameMode(bool m = true);
  250.     /******************** Effective Length options *******************/
  251.     Int8 GetDbLength() const;
  252.     void SetDbLength(Int8 l);
  253.     unsigned int GetDbSeqNum() const;
  254.     void SetDbSeqNum(unsigned int n);
  255.     Int8 GetEffectiveSearchSpace() const;
  256.     void SetEffectiveSearchSpace(Int8 eff);
  257.     bool GetUseRealDbSize() const;
  258.     void SetUseRealDbSize(bool u = true);
  259.     int GetDbGeneticCode() const;
  260.    //const unsigned char* GetDbGeneticCodeStr() const;
  261.    //void SetDbGeneticCodeStr(const unsigned char* gc_str);
  262.     // Set both integer and string genetic code in one call
  263.     void SetDbGeneticCode(int gc);
  264.     /// @todo PSI-Blast options could go on their own subclass?
  265.     const char* GetPHIPattern() const;
  266.     void SetPHIPattern(const char* pattern, bool is_dna);
  267.     /// Allows to dump a snapshot of the object
  268.     void DebugDump(CDebugDumpContext ddc, unsigned int depth) const;
  269.     
  270.     /******************** PSIBlast options *******************/
  271.     double GetInclusionThreshold() const;
  272.     void SetInclusionThreshold(double incthr);
  273.     
  274.     short GetPseudoCount() const;
  275.     void SetPseudoCount(short ps);
  276.     
  277.     QuerySetUpOptions * GetQueryOpts() const
  278.     {
  279.         return m_QueryOpts;
  280.     }
  281.     
  282.     LookupTableOptions * GetLutOpts() const
  283.     {
  284.         return m_LutOpts;
  285.     }
  286.     
  287.     BlastInitialWordOptions * GetInitWordOpts() const
  288.     {
  289.         return m_InitWordOpts;
  290.     }
  291.     
  292.     BlastExtensionOptions * GetExtnOpts() const
  293.     {
  294.         return m_ExtnOpts;
  295.     }
  296.     
  297.     BlastHitSavingOptions * GetHitSaveOpts() const
  298.     {
  299.         return m_HitSaveOpts;
  300.     }
  301.     
  302.     PSIBlastOptions * GetPSIBlastOpts() const
  303.     {
  304.         return m_PSIBlastOpts;
  305.     }
  306.     
  307.     BlastDatabaseOptions * GetDbOpts() const
  308.     {
  309.         return m_DbOpts;
  310.     }
  311.     
  312.     BlastScoringOptions * GetScoringOpts() const
  313.     {
  314.         return m_ScoringOpts;
  315.     }
  316.     
  317.     BlastEffectiveLengthsOptions * GetEffLenOpts() const
  318.     {
  319.         return m_EffLenOpts.get();
  320.     }
  321.     
  322.     bool operator==(const CBlastOptionsLocal& rhs) const;
  323.     bool operator!=(const CBlastOptionsLocal& rhs) const;
  324. protected:
  325.     /// Query sequence settings
  326.     CQuerySetUpOptions            m_QueryOpts;
  327.     /// Lookup table settings
  328.     CLookupTableOptions           m_LutOpts;
  329.     /// Word settings 
  330.     CBlastInitialWordOptions      m_InitWordOpts;
  331.     /// Hit extension settings
  332.     CBlastExtensionOptions        m_ExtnOpts;
  333.     /// Hit saving settings
  334.     CBlastHitSavingOptions        m_HitSaveOpts;
  335.     /// PSI-Blast settings
  336.     CPSIBlastOptions              m_PSIBlastOpts;
  337.     /// Blast database settings
  338.     CBlastDatabaseOptions         m_DbOpts;
  339.     /// Scoring options
  340.     CBlastScoringOptions          m_ScoringOpts;
  341.     /// Effective lengths options
  342.     //CBlastEffectiveLengthsOptions m_EffLenOpts;
  343.     AutoPtr<BlastEffectiveLengthsOptions,
  344.     CDeleter<BlastEffectiveLengthsOptions> > m_EffLenOpts;
  345.     /// Blast program
  346.     EProgram                             m_Program;
  347. private:
  348.     /// Prohibit copy c-tor 
  349.     CBlastOptionsLocal(const CBlastOptionsLocal& bo);
  350.     /// Prohibit assignment operator
  351.     CBlastOptionsLocal& operator=(const CBlastOptionsLocal& bo);
  352. };
  353. /// Encapsulates all blast input parameters
  354. class NCBI_XBLAST_EXPORT CBlastOptionsRemote : public CObject
  355. {
  356. public:
  357.     CBlastOptionsRemote(void)
  358.         : m_DoneDefaults(false)
  359.     {
  360.         //m_Req.Reset(new objects::CBlast4_queue_search_request);
  361.         m_ReqOpts.Reset(new objects::CBlast4_parameters);
  362.     }
  363.     
  364.     ~CBlastOptionsRemote()
  365.     {
  366.     }
  367.     
  368. //     typedef ncbi::objects::CBlast4_queue_search_request TBlast4Req;
  369. //     CRef<TBlast4Req> GetBlast4Request()
  370. //     {
  371. //         return m_Req;
  372. //     }
  373.     
  374.     // the "new paradigm"
  375.     typedef ncbi::objects::CBlast4_parameters TBlast4Opts;
  376.     TBlast4Opts * GetBlast4AlgoOpts()
  377.     {
  378.         return m_ReqOpts;
  379.     }
  380.     
  381.     typedef vector< CConstRef<objects::CSeq_loc> > TSeqLocVector;
  382.     
  383. //     // Basic mandatory functions
  384. //     void SetProgram(const char * v)
  385. //     {
  386. //         m_Req->SetProgram(v);
  387. //     }
  388.     
  389. //     void SetService(const char * v)
  390. //     {
  391. //         m_Req->SetService(v);
  392. //     }
  393.     
  394.     // SetValue(x,y) with different types:
  395.     void SetValue(EBlastOptIdx opt, const EProgram            & x);
  396.     void SetValue(EBlastOptIdx opt, const int                 & x);
  397.     void SetValue(EBlastOptIdx opt, const double              & x);
  398.     void SetValue(EBlastOptIdx opt, const char                * x);
  399.     void SetValue(EBlastOptIdx opt, const TSeqLocVector       & x);
  400.     void SetValue(EBlastOptIdx opt, const SeedContainerType   & x);
  401.     void SetValue(EBlastOptIdx opt, const SeedExtensionMethod & x);
  402.     void SetValue(EBlastOptIdx opt, const bool                & x);
  403.     void SetValue(EBlastOptIdx opt, const Int8                & x);
  404.     
  405.     // Pseudo-types:
  406.     void SetValue(EBlastOptIdx opt, const short & x)
  407.     { int x2 = x; SetValue(opt, x2); }
  408.     
  409.     void SetValue(EBlastOptIdx opt, const unsigned int & x)
  410.     { int x2 = x; SetValue(opt, x2); }
  411.     
  412.     void SetValue(EBlastOptIdx opt, const unsigned char & x)
  413.     { int x2 = x; SetValue(opt, x2); }
  414.     
  415.     void SetValue(EBlastOptIdx opt, const objects::ENa_strand & x)
  416.     { int x2 = x; SetValue(opt, x2); }
  417.     
  418.     void DoneDefaults()
  419.     {
  420.         m_DoneDefaults = true;
  421.     }
  422.     
  423. private:
  424.     //CRef<objects::CBlast4_queue_search_request> m_Req;
  425.     CRef<objects::CBlast4_parameters> m_ReqOpts;
  426.     
  427.     bool m_DoneDefaults;
  428.     
  429. //     void x_SetProgram(const char * program)
  430. //     {
  431. //         m_Req->SetProgram(program);
  432. //     }
  433.     
  434. //     void x_SetService(const char * service)
  435. //     {
  436. //         m_Req->SetService(service);
  437. //     }
  438.     
  439.     template<class T>
  440.     void x_SetParam(const char * name, T & value)
  441.     {
  442.         x_SetOneParam(name, & value);
  443.     }
  444.     
  445.     void x_SetOneParam(const char * name, const int * x)
  446.     {
  447.         CRef<objects::CBlast4_value> v(new objects::CBlast4_value);
  448.         v->SetInteger(*x);
  449.         
  450.         CRef<objects::CBlast4_parameter> p(new objects::CBlast4_parameter);
  451.         p->SetName(name);
  452.         p->SetValue(*v);
  453.         
  454.         m_ReqOpts->Set().push_back(p);
  455.     }
  456.     
  457.     void x_SetOneParam(const char * name, const char ** x)
  458.     {
  459.         CRef<objects::CBlast4_value> v(new objects::CBlast4_value);
  460.         v->SetString().assign((x && (*x)) ? (*x) : "");
  461.         
  462.         CRef<objects::CBlast4_parameter> p(new objects::CBlast4_parameter);
  463.         p->SetName(name);
  464.         p->SetValue(*v);
  465.         
  466.         m_ReqOpts->Set().push_back(p);
  467.     }
  468.     
  469.     void x_SetOneParam(const char * name, const bool * x)
  470.     {
  471.         CRef<objects::CBlast4_value> v(new objects::CBlast4_value);
  472.         v->SetBoolean(*x);
  473.         
  474.         CRef<objects::CBlast4_parameter> p(new objects::CBlast4_parameter);
  475.         p->SetName(name);
  476.         p->SetValue(*v);
  477.         
  478.         m_ReqOpts->Set().push_back(p);
  479.     }
  480.     
  481.     void x_SetOneParam(const char * name, CRef<objects::CBlast4_cutoff> * x)
  482.     {
  483.         CRef<objects::CBlast4_value> v(new objects::CBlast4_value);
  484.         v->SetCutoff(**x);
  485.         
  486.         CRef<objects::CBlast4_parameter> p(new objects::CBlast4_parameter);
  487.         p->SetName(name);
  488.         p->SetValue(*v);
  489.         
  490.         m_ReqOpts->Set().push_back(p);
  491.     }
  492.     
  493.     void x_SetOneParam(const char * name, const double * x)
  494.     {
  495.         CRef<objects::CBlast4_value> v(new objects::CBlast4_value);
  496.         v->SetReal(*x);
  497.         
  498.         CRef<objects::CBlast4_parameter> p(new objects::CBlast4_parameter);
  499.         p->SetName(name);
  500.         p->SetValue(*v);
  501.         
  502.         m_ReqOpts->Set().push_back(p);
  503.     }
  504.     
  505.     void x_SetOneParam(const char * name, const Int8 * x)
  506.     {
  507.         CRef<objects::CBlast4_value> v(new objects::CBlast4_value);
  508.         v->SetBig_integer(*x);
  509.         
  510.         CRef<objects::CBlast4_parameter> p(new objects::CBlast4_parameter);
  511.         p->SetName(name);
  512.         p->SetValue(*v);
  513.         
  514.         m_ReqOpts->Set().push_back(p);
  515.     }
  516.     
  517.     void x_SetOneParam(const char * name, objects::EBlast4_strand_type * x)
  518.     {
  519.         CRef<objects::CBlast4_value> v(new objects::CBlast4_value);
  520.         v->SetStrand_type(*x);
  521.         
  522.         CRef<objects::CBlast4_parameter> p(new objects::CBlast4_parameter);
  523.         p->SetName(name);
  524.         p->SetValue(*v);
  525.         
  526.         m_ReqOpts->Set().push_back(p);
  527.     }
  528.     
  529.     void x_Throwx(const string& msg) const
  530.     {
  531.         cout << "thrown: " << msg << endl;
  532.         NCBI_THROW(CBlastException, eInternal, msg);
  533.     }
  534. };
  535. /// Encapsulates all blast input parameters
  536. class NCBI_XBLAST_EXPORT CBlastOptions : public CObject
  537. {
  538. public:
  539.     enum EAPILocality {
  540.         eLocal,
  541.         eRemote,
  542.         eBoth
  543.     };
  544.     
  545.     CBlastOptions(EAPILocality locality = eLocal);
  546.     ~CBlastOptions();
  547.     
  548.     EAPILocality GetLocality(void)
  549.     {
  550.         if (! m_Remote) {
  551.             return eLocal;
  552.         }
  553.         if (! m_Local) {
  554.             return eRemote;
  555.         }
  556.         return eBoth;
  557.     }
  558.     
  559. //     void SetProgramService(const char * program, const char * service)
  560. //     {
  561. //         if (m_Remote) {
  562. //             m_Remote->SetProgramService(program, service);
  563. //         }
  564. //     }
  565.     
  566.     /// Validate the options
  567.     bool Validate() const
  568.     {
  569.         bool local_okay  = m_Local  ? (m_Local ->Validate()) : true;
  570.         
  571.         return local_okay;
  572.     }
  573.     
  574.     /// Accessors/Mutators for individual options
  575.     EProgram GetProgram() const
  576.     {
  577.         if (! m_Local) {
  578.             x_Throwx("Error: GetProgram() not available.");
  579.         }
  580.         return m_Local->GetProgram();
  581.     }
  582.     void SetProgram(EProgram p)
  583.     {
  584.         if (m_Local) {
  585.             m_Local->SetProgram(p);
  586.         }
  587.         if (m_Remote) {
  588.             m_Remote->SetValue(eBlastOpt_Program, p);
  589.         }
  590.     }
  591.     /******************* Lookup table options ***********************/
  592.     int GetWordThreshold() const
  593.     {
  594.         if (! m_Local) {
  595.             x_Throwx("Error: GetWordThreshold() not available.");
  596.         }
  597.         return m_Local->GetWordThreshold();
  598.     }
  599.     void SetWordThreshold(int w)
  600.     {
  601.         if (m_Local) {
  602.             m_Local->SetWordThreshold(w);
  603.         }
  604.         if (m_Remote) {
  605.             m_Remote->SetValue(eBlastOpt_WordThreshold, w);
  606.         }
  607.     }
  608.     int GetLookupTableType() const
  609.     {
  610.         if (! m_Local) {
  611.             x_Throwx("Error: GetLookupTableType() not available.");
  612.         }
  613.         return m_Local->GetLookupTableType();
  614.     }
  615.     void SetLookupTableType(int type)
  616.     {
  617.         if (m_Local) {
  618.             m_Local->SetLookupTableType(type);
  619.         }
  620.         if (m_Remote) {
  621.             m_Remote->SetValue(eBlastOpt_LookupTableType, type);
  622.         }
  623.     }
  624.     short GetWordSize() const
  625.     {
  626.         if (! m_Local) {
  627.             x_Throwx("Error: GetWordSize() not available.");
  628.         }
  629.         return m_Local->GetWordSize();
  630.     }
  631.     void SetWordSize(short ws)
  632.     {
  633.         if (m_Local) {
  634.             m_Local->SetWordSize(ws);
  635.         }
  636.         if (m_Remote) {
  637.             m_Remote->SetValue(eBlastOpt_WordSize, ws);
  638.         }
  639.     }
  640.     int GetAlphabetSize() const
  641.     {
  642.         if (! m_Local) {
  643.             x_Throwx("Error: GetAlphabetSize() not available.");
  644.         }
  645.         return m_Local->GetAlphabetSize();
  646.     }
  647.     void SetAlphabetSize(int s)
  648.     {
  649.         if (m_Local) {
  650.             m_Local->SetAlphabetSize(s);
  651.         }
  652.         if (m_Remote) {
  653.             m_Remote->SetValue(eBlastOpt_AlphabetSize, s);
  654.         }
  655.     }
  656.     unsigned char GetScanStep() const
  657.     {
  658.         if (! m_Local) {
  659.             x_Throwx("Error: GetScanStep() not available.");
  660.         }
  661.         return m_Local->GetScanStep();
  662.     }
  663.     void SetScanStep(unsigned char s)
  664.     {
  665.         if (m_Local) {
  666.             m_Local->SetScanStep(s);
  667.         }
  668.         if (m_Remote) {
  669.             m_Remote->SetValue(eBlastOpt_ScanStep, s);
  670.         }
  671.     }
  672.     /// Megablast only lookup table options
  673.     unsigned char GetMBTemplateLength() const
  674.     {
  675.         if (! m_Local) {
  676.             x_Throwx("Error: GetMBTemplateLength() not available.");
  677.         }
  678.         return m_Local->GetMBTemplateLength();
  679.     }
  680.     void SetMBTemplateLength(unsigned char len)
  681.     {
  682.         if (m_Local) {
  683.             m_Local->SetMBTemplateLength(len);
  684.         }
  685.         if (m_Remote) {
  686.             m_Remote->SetValue(eBlastOpt_MBTemplateLength, len);
  687.         }
  688.     }
  689.     unsigned char GetMBTemplateType() const
  690.     {
  691.         if (! m_Local) {
  692.             x_Throwx("Error: GetMBTemplateType() not available.");
  693.         }
  694.         return m_Local->GetMBTemplateType();
  695.     }
  696.     void SetMBTemplateType(unsigned char type)
  697.     {
  698.         if (m_Local) {
  699.             m_Local->SetMBTemplateType(type);
  700.         }
  701.         if (m_Remote) {
  702.             m_Remote->SetValue(eBlastOpt_MBTemplateType, type);
  703.         }
  704.     }
  705.     int GetMBMaxPositions() const
  706.     {
  707.         if (! m_Local) {
  708.             x_Throwx("Error: GetMBMaxPositions() not available.");
  709.         }
  710.         return m_Local->GetMBMaxPositions();
  711.     }
  712.     void SetMBMaxPositions(int m)
  713.     {
  714.         if (m_Local) {
  715.             m_Local->SetMBMaxPositions(m);
  716.         }
  717.         if (m_Remote) {
  718.             m_Remote->SetValue(eBlastOpt_MBMaxPositions, m);
  719.         }
  720.     }
  721.     /******************* Query setup options ************************/
  722.     const char* GetFilterString() const
  723.     {
  724.         if (! m_Local) {
  725.             x_Throwx("Error: GetFilterString() not available.");
  726.         }
  727.         return m_Local->GetFilterString();
  728.     }
  729.     void SetFilterString(const char* f)
  730.     {
  731.         if (m_Local) {
  732.             m_Local->SetFilterString(f);
  733.         }
  734.         if (m_Remote) {
  735.             m_Remote->SetValue(eBlastOpt_FilterString, f);
  736.         }
  737.     }
  738.     objects::ENa_strand GetStrandOption() const
  739.     {
  740.         if (! m_Local) {
  741.             x_Throwx("Error: GetStrandOption() not available.");
  742.         }
  743.         return m_Local->GetStrandOption();
  744.     }
  745.     void SetStrandOption(objects::ENa_strand s)
  746.     {
  747.         if (m_Local) {
  748.             m_Local->SetStrandOption(s);
  749.         }
  750.         if (m_Remote) {
  751.             m_Remote->SetValue(eBlastOpt_StrandOption, s);
  752.         }
  753.     }
  754.     int GetQueryGeneticCode() const
  755.     {
  756.         if (! m_Local) {
  757.             x_Throwx("Error: GetQueryGeneticCode() not available.");
  758.         }
  759.         return m_Local->GetQueryGeneticCode();
  760.     }
  761.     void SetQueryGeneticCode(int gc)
  762.     {
  763.         if (m_Local) {
  764.             m_Local->SetQueryGeneticCode(gc);
  765.         }
  766.         if (m_Remote) {
  767.             m_Remote->SetValue(eBlastOpt_QueryGeneticCode, gc);
  768.         }
  769.     }
  770.     /******************* Initial word options ***********************/
  771.     int GetWindowSize() const
  772.     {
  773.         if (! m_Local) {
  774.             x_Throwx("Error: GetWindowSize() not available.");
  775.         }
  776.         return m_Local->GetWindowSize();
  777.     }
  778.     void SetWindowSize(int w)
  779.     {
  780.         if (m_Local) {
  781.             m_Local->SetWindowSize(w);
  782.         }
  783.         if (m_Remote) {
  784.             m_Remote->SetValue(eBlastOpt_WindowSize, w);
  785.         }
  786.     }
  787.     SeedContainerType GetSeedContainerType() const
  788.     {
  789.         if (! m_Local) {
  790.             x_Throwx("Error: GetSeedContainerType() not available.");
  791.         }
  792.         return m_Local->GetSeedContainerType();
  793.     }
  794.     void SetSeedContainerType(SeedContainerType type)
  795.     {
  796.         if (m_Local) {
  797.             m_Local->SetSeedContainerType(type);
  798.         }
  799.         if (m_Remote) {
  800.             m_Remote->SetValue(eBlastOpt_SeedContainerType, type);
  801.         }
  802.     }
  803.     SeedExtensionMethod GetSeedExtensionMethod() const
  804.     {
  805.         if (! m_Local) {
  806.             x_Throwx("Error: GetSeedExtensionMethod() not available.");
  807.         }
  808.         return m_Local->GetSeedExtensionMethod();
  809.     }
  810.     void SetSeedExtensionMethod(SeedExtensionMethod method)
  811.     {
  812.         if (m_Local) {
  813.             m_Local->SetSeedExtensionMethod(method);
  814.         }
  815.         if (m_Remote) {
  816.             m_Remote->SetValue(eBlastOpt_SeedExtensionMethod, method);
  817.         }
  818.     }
  819.     bool GetVariableWordSize() const
  820.     {
  821.         if (! m_Local) {
  822.             x_Throwx("Error: GetVariableWordSize() not available.");
  823.         }
  824.         return m_Local->GetVariableWordSize();
  825.     }
  826.     void SetVariableWordSize(bool val = true)
  827.     {
  828.         if (m_Local) {
  829.             m_Local->SetVariableWordSize(val);
  830.         }
  831.         if (m_Remote) {
  832.             m_Remote->SetValue(eBlastOpt_VariableWordSize, val);
  833.         }
  834.     }
  835.     bool GetUngappedExtension() const
  836.     {
  837.         if (! m_Local) {
  838.             x_Throwx("Error: GetUngappedExtension() not available.");
  839.         }
  840.         return m_Local->GetUngappedExtension();
  841.     }
  842.     void SetUngappedExtension(bool val = true)
  843.     {
  844.         if (m_Local) {
  845.             m_Local->SetUngappedExtension(val);
  846.         }
  847.         if (m_Remote) {
  848.             m_Remote->SetValue(eBlastOpt_UngappedExtension, val);
  849.         }
  850.     }
  851.     double GetXDropoff() const
  852.     {
  853.         if (! m_Local) {
  854.             x_Throwx("Error: GetXDropoff() not available.");
  855.         }
  856.         return m_Local->GetXDropoff();
  857.     }
  858.     void SetXDropoff(double x)
  859.     {
  860.         if (m_Local) {
  861.             m_Local->SetXDropoff(x);
  862.         }
  863.         if (m_Remote) {
  864.             m_Remote->SetValue(eBlastOpt_XDropoff, x);
  865.         }
  866.     }
  867.     /******************* Gapped extension options *******************/
  868.     double GetGapXDropoff() const
  869.     {
  870.         if (! m_Local) {
  871.             x_Throwx("Error: GetGapXDropoff() not available.");
  872.         }
  873.         return m_Local->GetGapXDropoff();
  874.     }
  875.     void SetGapXDropoff(double x)
  876.     {
  877.         if (m_Local) {
  878.             m_Local->SetGapXDropoff(x);
  879.         }
  880.         if (m_Remote) {
  881.             m_Remote->SetValue(eBlastOpt_GapXDropoff, x);
  882.         }
  883.     }
  884.     double GetGapXDropoffFinal() const
  885.     {
  886.         if (! m_Local) {
  887.             x_Throwx("Error: GetGapXDropoffFinal() not available.");
  888.         }
  889.         return m_Local->GetGapXDropoffFinal();
  890.     }
  891.     void SetGapXDropoffFinal(double x)
  892.     {
  893.         if (m_Local) {
  894.             m_Local->SetGapXDropoffFinal(x);
  895.         }
  896.         if (m_Remote) {
  897.             m_Remote->SetValue(eBlastOpt_GapXDropoffFinal, x);
  898.         }
  899.     }
  900.     double GetGapTrigger() const
  901.     {
  902.         if (! m_Local) {
  903.             x_Throwx("Error: GetGapTrigger() not available.");
  904.         }
  905.         return m_Local->GetGapTrigger();
  906.     }
  907.     void SetGapTrigger(double g)
  908.     {
  909.         if (m_Local) {
  910.             m_Local->SetGapTrigger(g);
  911.         }
  912.         if (m_Remote) {
  913.             m_Remote->SetValue(eBlastOpt_GapTrigger, g);
  914.         }
  915.     }
  916.     EBlastPrelimGapExt GetGapExtnAlgorithm() const
  917.     {
  918.         if (! m_Local) {
  919.             x_Throwx("Error: GetGapExtnAlgorithm() not available.");
  920.         }
  921.         return m_Local->GetGapExtnAlgorithm();
  922.     }
  923.     void SetGapExtnAlgorithm(EBlastPrelimGapExt a)
  924.     {
  925.         if (m_Local) {
  926.             m_Local->SetGapExtnAlgorithm(a);
  927.         }
  928.         if (m_Remote) {
  929.             m_Remote->SetValue(eBlastOpt_GapExtnAlgorithm, a);
  930.         }
  931.     }
  932.     EBlastTbackExt GetGapTracebackAlgorithm() const
  933.     {
  934.         if (! m_Local) {
  935.             x_Throwx("Error: GetGapTracebackAlgorithm() not available.");
  936.         }
  937.         return m_Local->GetGapTracebackAlgorithm();
  938.     }
  939.     void SetGapTracebackAlgorithm(EBlastTbackExt a)
  940.     {
  941.         if (m_Local) {
  942.             m_Local->SetGapTracebackAlgorithm(a);
  943.         }
  944.         if (m_Remote) {
  945.             m_Remote->SetValue(eBlastOpt_GapTracebackAlgorithm, a);
  946.         }
  947.     }
  948.     void SetSkipTraceback(bool skip = true)
  949.     {
  950.         if (m_Local) {
  951.             m_Local->SetSkipTraceback(skip);
  952.         }
  953.         if (m_Remote) {
  954.             m_Remote->SetValue(eBlastOpt_SkipTraceback, skip);
  955.         }
  956.     }
  957.     /******************* Hit saving options *************************/
  958.     int GetHitlistSize() const
  959.     {
  960.         if (! m_Local) {
  961.             x_Throwx("Error: GetHitlistSize() not available.");
  962.         }
  963.         return m_Local->GetHitlistSize();
  964.     }
  965.     void SetHitlistSize(int s)
  966.     {
  967.         if (m_Local) {
  968.             m_Local->SetHitlistSize(s);
  969.         }
  970.         if (m_Remote) {
  971.             m_Remote->SetValue(eBlastOpt_HitlistSize, s);
  972.         }
  973.     }
  974.     int GetPrelimHitlistSize() const
  975.     {
  976.         if (! m_Local) {
  977.             x_Throwx("Error: GetPrelimHitlistSize() not available.");
  978.         }
  979.         return m_Local->GetPrelimHitlistSize();
  980.     }
  981.     void SetPrelimHitlistSize(int s)
  982.     {
  983.         if (m_Local) {
  984.             m_Local->SetPrelimHitlistSize(s);
  985.         }
  986.         if (m_Remote) {
  987.             m_Remote->SetValue(eBlastOpt_PrelimHitlistSize, s);
  988.         }
  989.     }
  990.     int GetMaxNumHspPerSequence() const
  991.     {
  992.         if (! m_Local) {
  993.             x_Throwx("Error: GetMaxNumHspPerSequence() not available.");
  994.         }
  995.         return m_Local->GetMaxNumHspPerSequence();
  996.     }
  997.     void SetMaxNumHspPerSequence(int m)
  998.     {
  999.         if (m_Local) {
  1000.             m_Local->SetMaxNumHspPerSequence(m);
  1001.         }
  1002.         if (m_Remote) {
  1003.             m_Remote->SetValue(eBlastOpt_MaxNumHspPerSequence, m);
  1004.         }
  1005.     }
  1006.     /// Maximum total number of HSPs to keep
  1007.     int GetTotalHspLimit() const
  1008.     {
  1009.         if (! m_Local) {
  1010.             x_Throwx("Error: GetTotalHspLimit() not available.");
  1011.         }
  1012.         return m_Local->GetTotalHspLimit();
  1013.     }
  1014.     void SetTotalHspLimit(int l)
  1015.     {
  1016.         if (m_Local) {
  1017.             m_Local->SetTotalHspLimit(l);
  1018.         }
  1019.         if (m_Remote) {
  1020.             m_Remote->SetValue(eBlastOpt_TotalHspLimit, l);
  1021.         }
  1022.     }
  1023.     bool GetCullingMode() const
  1024.     {
  1025.         if (! m_Local) {
  1026.             x_Throwx("Error: GetCullingMode() not available.");
  1027.         }
  1028.         return m_Local->GetCullingMode();
  1029.     }
  1030.     void SetCullingMode(bool m = true)
  1031.     {
  1032.         if (m_Local) {
  1033.             m_Local->SetCullingMode(m);
  1034.         }
  1035.         if (m_Remote) {
  1036.             m_Remote->SetValue(eBlastOpt_CullingMode, m);
  1037.         }
  1038.     }
  1039.     /// Start of the region required to be part of the alignment
  1040.     int GetRequiredStart() const
  1041.     {
  1042.         if (! m_Local) {
  1043.             x_Throwx("Error: GetRequiredStart() not available.");
  1044.         }
  1045.         return m_Local->GetRequiredStart();
  1046.     }
  1047.     void SetRequiredStart(int s)
  1048.     {
  1049.         if (m_Local) {
  1050.             m_Local->SetRequiredStart(s);
  1051.         }
  1052.         if (m_Remote) {
  1053.             m_Remote->SetValue(eBlastOpt_RequiredStart, s);
  1054.         }
  1055.     }
  1056.     /// End of the region required to be part of the alignment
  1057.     int GetRequiredEnd() const
  1058.     {
  1059.         if (! m_Local) {
  1060.             x_Throwx("Error: GetRequiredEnd() not available.");
  1061.         }
  1062.         return m_Local->GetRequiredEnd();
  1063.     }
  1064.     void SetRequiredEnd(int e)
  1065.     {
  1066.         if (m_Local) {
  1067.             m_Local->SetRequiredEnd(e);
  1068.         }
  1069.         if (m_Remote) {
  1070.             m_Remote->SetValue(eBlastOpt_RequiredEnd, e);
  1071.         }
  1072.     }
  1073.     // Expect value cut-off threshold for an HSP, or a combined hit if sum
  1074.     // statistics is used
  1075.     double GetEvalueThreshold() const
  1076.     {
  1077.         if (! m_Local) {
  1078.             x_Throwx("Error: GetEvalueThreshold() not available.");
  1079.         }
  1080.         return m_Local->GetEvalueThreshold();
  1081.     }
  1082.     void SetEvalueThreshold(double eval)
  1083.     {
  1084.         if (m_Local) {
  1085.             m_Local->SetEvalueThreshold(eval);
  1086.         }
  1087.         if (m_Remote) {
  1088.             m_Remote->SetValue(eBlastOpt_EvalueThreshold, eval);
  1089.         }
  1090.     }
  1091.     double GetOriginalEvalue() const
  1092.     {
  1093.         if (! m_Local) {
  1094.             x_Throwx("Error: GetOriginalEvalue() not available.");
  1095.         }
  1096.         return m_Local->GetOriginalEvalue();
  1097.     }
  1098.     //void SetOriginalEvalue(double e);
  1099.     // Raw score cutoff threshold
  1100.     int GetCutoffScore() const
  1101.     {
  1102.         if (! m_Local) {
  1103.             x_Throwx("Error: GetCutoffScore() not available.");
  1104.         }
  1105.         return m_Local->GetCutoffScore();
  1106.     }
  1107.     void SetCutoffScore(int s)
  1108.     {
  1109.         if (m_Local) {
  1110.             m_Local->SetCutoffScore(s);
  1111.         }
  1112.         if (m_Remote) {
  1113.             m_Remote->SetValue(eBlastOpt_CutoffScore, s);
  1114.         }
  1115.     }
  1116.     double GetPercentIdentity() const
  1117.     {
  1118.         if (! m_Local) {
  1119.             x_Throwx("Error: GetPercentIdentity() not available.");
  1120.         }
  1121.         return m_Local->GetPercentIdentity();
  1122.     }
  1123.     void SetPercentIdentity(double p)
  1124.     {
  1125.         if (m_Local) {
  1126.             m_Local->SetPercentIdentity(p);
  1127.         }
  1128.         if (m_Remote) {
  1129.             m_Remote->SetValue(eBlastOpt_PercentIdentity, p);
  1130.         }
  1131.     }
  1132.     /// Sum statistics options
  1133.     bool GetSumStatisticsMode() const
  1134.     {
  1135.         if (! m_Local) {
  1136.             x_Throwx("Error: GetSumStatisticsMode() not available.");
  1137.         }
  1138.         return m_Local->GetSumStatisticsMode();
  1139.     }
  1140.     void SetSumStatisticsMode(bool m = true)
  1141.     {
  1142.         if (m_Local) {
  1143.             m_Local->SetSumStatisticsMode(m);
  1144.         }
  1145.         if (m_Remote) {
  1146.             m_Remote->SetValue(eBlastOpt_SumStatisticsMode, m);
  1147.         }
  1148.     }
  1149.     int GetLongestIntronLength() const // for tblastn w/ linking HSPs
  1150.     {
  1151.         if (! m_Local) {
  1152.             x_Throwx("Error: GetLongestIntronLength() not available.");
  1153.         }
  1154.         return m_Local->GetLongestIntronLength();
  1155.     }
  1156.     void SetLongestIntronLength(int l) // for tblastn w/ linking HSPs
  1157.     {
  1158.         if (m_Local) {
  1159.             m_Local->SetLongestIntronLength(l);
  1160.         }
  1161.         if (m_Remote) {
  1162.             m_Remote->SetValue(eBlastOpt_LongestIntronLength, l);
  1163.         }
  1164.     }
  1165.     /// Returns true if gapped BLAST is set, false otherwise
  1166.     bool GetGappedMode() const
  1167.     {
  1168.         if (! m_Local) {
  1169.             x_Throwx("Error: GetGappedMode() not available.");
  1170.         }
  1171.         return m_Local->GetGappedMode();
  1172.     }
  1173.     void SetGappedMode(bool m = true)
  1174.     {
  1175.         if (m_Local) {
  1176.             m_Local->SetGappedMode(m);
  1177.         }
  1178.         if (m_Remote) {
  1179.             m_Remote->SetValue(eBlastOpt_GappedMode, m);
  1180.         }
  1181.     }
  1182.     // Deprecated
  1183.     bool GetNeighboringMode() const
  1184.     {
  1185.         if (! m_Local) {
  1186.             x_Throwx("Error: GetNeighboringMode() not available.");
  1187.         }
  1188.         return m_Local->GetNeighboringMode();
  1189.     }
  1190.     // Deprecated
  1191.     void SetNeighboringMode(bool m = true)
  1192.     {
  1193.         if (m_Local) {
  1194.             m_Local->SetNeighboringMode(m);
  1195.         }
  1196.         if (m_Remote) {
  1197.             m_Remote->SetValue(eBlastOpt_NeighboringMode, m);
  1198.         }
  1199.     }
  1200.     /************************ Scoring options ************************/
  1201.     const char* GetMatrixName() const
  1202.     {
  1203.         if (! m_Local) {
  1204.             x_Throwx("Error: GetMatrixName() not available.");
  1205.         }
  1206.         return m_Local->GetMatrixName();
  1207.     }
  1208.     void SetMatrixName(const char* matrix)
  1209.     {
  1210.         if (m_Local) {
  1211.             m_Local->SetMatrixName(matrix);
  1212.         }
  1213.         if (m_Remote) {
  1214.             m_Remote->SetValue(eBlastOpt_MatrixName, matrix);
  1215.         }
  1216.     }
  1217.     const char* GetMatrixPath() const
  1218.     {
  1219.         if (! m_Local) {
  1220.             x_Throwx("Error: GetMatrixPath() not available.");
  1221.         }
  1222.         return m_Local->GetMatrixPath();
  1223.     }
  1224.     void SetMatrixPath(const char* path)
  1225.     {
  1226.         if (m_Local) {
  1227.             m_Local->SetMatrixPath(path);
  1228.         }
  1229.         if (m_Remote) {
  1230.             m_Remote->SetValue(eBlastOpt_MatrixPath, path);
  1231.         }
  1232.     }
  1233.     int GetMatchReward() const
  1234.     {
  1235.         if (! m_Local) {
  1236.             x_Throwx("Error: GetMatchReward() not available.");
  1237.         }
  1238.         return m_Local->GetMatchReward();
  1239.     }
  1240.     void SetMatchReward(int r)
  1241.     {
  1242.         if (m_Local) {
  1243.             m_Local->SetMatchReward(r);
  1244.         }
  1245.         if (m_Remote) {
  1246.             m_Remote->SetValue(eBlastOpt_MatchReward, r);
  1247.         }
  1248.     }
  1249.     int GetMismatchPenalty() const
  1250.     {
  1251.         if (! m_Local) {
  1252.             x_Throwx("Error: GetMismatchPenalty() not available.");
  1253.         }
  1254.         return m_Local->GetMismatchPenalty();
  1255.     }
  1256.     void SetMismatchPenalty(int p)
  1257.     {
  1258.         if (m_Local) {
  1259.             m_Local->SetMismatchPenalty(p);
  1260.         }
  1261.         if (m_Remote) {
  1262.             m_Remote->SetValue(eBlastOpt_MismatchPenalty, p);
  1263.         }
  1264.     }
  1265.     int GetGapOpeningCost() const
  1266.     {
  1267.         if (! m_Local) {
  1268.             x_Throwx("Error: GetGapOpeningCost() not available.");
  1269.         }
  1270.         return m_Local->GetGapOpeningCost();
  1271.     }
  1272.     void SetGapOpeningCost(int g)
  1273.     {
  1274.         if (m_Local) {
  1275.             m_Local->SetGapOpeningCost(g);
  1276.         }
  1277.         if (m_Remote) {
  1278.             m_Remote->SetValue(eBlastOpt_GapOpeningCost, g);
  1279.         }
  1280.     }
  1281.     int GetGapExtensionCost() const
  1282.     {
  1283.         if (! m_Local) {
  1284.             x_Throwx("Error: GetGapExtensionCost() not available.");
  1285.         }
  1286.         return m_Local->GetGapExtensionCost();
  1287.     }
  1288.     void SetGapExtensionCost(int e)
  1289.     {
  1290.         if (m_Local) {
  1291.             m_Local->SetGapExtensionCost(e);
  1292.         }
  1293.         if (m_Remote) {
  1294.             m_Remote->SetValue(eBlastOpt_GapExtensionCost, e);
  1295.         }
  1296.     }
  1297.     int GetFrameShiftPenalty() const
  1298.     {
  1299.         if (! m_Local) {
  1300.             x_Throwx("Error: GetFrameShiftPenalty() not available.");
  1301.         }
  1302.         return m_Local->GetFrameShiftPenalty();
  1303.     }
  1304.     void SetFrameShiftPenalty(int p)
  1305.     {
  1306.         if (m_Local) {
  1307.             m_Local->SetFrameShiftPenalty(p);
  1308.         }
  1309.         if (m_Remote) {
  1310.             m_Remote->SetValue(eBlastOpt_FrameShiftPenalty, p);
  1311.         }
  1312.     }
  1313.     int GetDecline2AlignPenalty() const
  1314.     {
  1315.         if (! m_Local) {
  1316.             x_Throwx("Error: GetDecline2AlignPenalty() not available.");
  1317.         }
  1318.         return m_Local->GetDecline2AlignPenalty();
  1319.     }
  1320.     void SetDecline2AlignPenalty(int p)
  1321.     {
  1322.         if (m_Local) {
  1323.             m_Local->SetDecline2AlignPenalty(p);
  1324.         }
  1325.         if (m_Remote) {
  1326.             m_Remote->SetValue(eBlastOpt_Decline2AlignPenalty, p);
  1327.         }
  1328.     }
  1329.     bool GetOutOfFrameMode() const
  1330.     {
  1331.         if (! m_Local) {
  1332.             x_Throwx("Error: GetOutOfFrameMode() not available.");
  1333.         }
  1334.         return m_Local->GetOutOfFrameMode();
  1335.     }
  1336.     void SetOutOfFrameMode(bool m = true)
  1337.     {
  1338.         if (m_Local) {
  1339.             m_Local->SetOutOfFrameMode(m);
  1340.         }
  1341.         if (m_Remote) {
  1342.             m_Remote->SetValue(eBlastOpt_OutOfFrameMode, m);
  1343.         }
  1344.     }
  1345.     /******************** Effective Length options *******************/
  1346.     Int8 GetDbLength() const
  1347.     {
  1348.         if (! m_Local) {
  1349.             x_Throwx("Error: GetDbLength() not available.");
  1350.         }
  1351.         return m_Local->GetDbLength();
  1352.     }
  1353.     void SetDbLength(Int8 l)
  1354.     {
  1355.         if (m_Local) {
  1356.             m_Local->SetDbLength(l);
  1357.         }
  1358.         if (m_Remote) {
  1359.             m_Remote->SetValue(eBlastOpt_DbLength, l);
  1360.         }
  1361.     }
  1362.     unsigned int GetDbSeqNum() const
  1363.     {
  1364.         if (! m_Local) {
  1365.             x_Throwx("Error: GetDbSeqNum() not available.");
  1366.         }
  1367.         return m_Local->GetDbSeqNum();
  1368.     }
  1369.     void SetDbSeqNum(unsigned int n)
  1370.     {
  1371.         if (m_Local) {
  1372.             m_Local->SetDbSeqNum(n);
  1373.         }
  1374.         if (m_Remote) {
  1375.             m_Remote->SetValue(eBlastOpt_DbSeqNum, n);
  1376.         }
  1377.     }
  1378.     Int8 GetEffectiveSearchSpace() const
  1379.     {
  1380.         if (! m_Local) {
  1381.             x_Throwx("Error: GetEffectiveSearchSpace() not available.");
  1382.         }
  1383.         return m_Local->GetEffectiveSearchSpace();
  1384.     }
  1385.     void SetEffectiveSearchSpace(Int8 eff)
  1386.     {
  1387.         if (m_Local) {
  1388.             m_Local->SetEffectiveSearchSpace(eff);
  1389.         }
  1390.         if (m_Remote) {
  1391.             m_Remote->SetValue(eBlastOpt_EffectiveSearchSpace, eff);
  1392.         }
  1393.     }
  1394.     bool GetUseRealDbSize() const
  1395.     {
  1396.         if (! m_Local) {
  1397.             x_Throwx("Error: GetUseRealDbSize() not available.");
  1398.         }
  1399.         return m_Local->GetUseRealDbSize();
  1400.     }
  1401.     void SetUseRealDbSize(bool u = true)
  1402.     {
  1403.         if (m_Local) {
  1404.             m_Local->SetUseRealDbSize(u);
  1405.         }
  1406.         if (m_Remote) {
  1407.             m_Remote->SetValue(eBlastOpt_UseRealDbSize, u);
  1408.         }
  1409.     }
  1410.     int GetDbGeneticCode() const
  1411.     {
  1412.         if (! m_Local) {
  1413.             x_Throwx("Error: GetDbGeneticCode() not available.");
  1414.         }
  1415.         return m_Local->GetDbGeneticCode();
  1416.     }
  1417.     
  1418.     //const unsigned char* GetDbGeneticCodeStr() const
  1419.     //{
  1420.     //    if (! m_Local) {
  1421.     //        throw string("Error: GetDbGeneticCodeStr() not available.");
  1422.     //    }
  1423.     //    return m_Local->GetDbGeneticCodeStr();
  1424.     //}
  1425.     //void SetDbGeneticCodeStr(const unsigned char* gc_str);
  1426.     
  1427.     // Set both integer and string genetic code in one call
  1428.     void SetDbGeneticCode(int gc)
  1429.     {
  1430.         if (m_Local) {
  1431.             m_Local->SetDbGeneticCode(gc);
  1432.         }
  1433.         if (m_Remote) {
  1434.             m_Remote->SetValue(eBlastOpt_DbGeneticCode, gc);
  1435.         }
  1436.     }
  1437.     /// @todo PSI-Blast options could go on their own subclass?
  1438.     const char* GetPHIPattern() const
  1439.     {
  1440.         if (! m_Local) {
  1441.             x_Throwx("Error: GetPHIPattern() not available.");
  1442.         }
  1443.         return m_Local->GetPHIPattern();
  1444.     }
  1445.     void SetPHIPattern(const char* pattern, bool is_dna)
  1446.     {
  1447.         if (m_Local) {
  1448.             m_Local->SetPHIPattern(pattern, is_dna);
  1449.         }
  1450.         if (m_Remote) {
  1451.             m_Remote->SetValue(eBlastOpt_PHIPattern, pattern);
  1452.             
  1453. // For now I will assume this is handled when the data is passed to the
  1454. // code in blast4_options - i.e. that code will discriminate on the basis
  1455. // of the type of *OptionHandle that is passed in.
  1456. //
  1457. //             if (is_dna) {
  1458. //                 m_Remote->SetProgram("blastn");
  1459. //             } else {
  1460. //                 m_Remote->SetProgram("blastp");
  1461. //             }
  1462. //             
  1463. //             m_Remote->SetService("phi");
  1464.         }
  1465.     }
  1466.     /******************** PSIBlast options *******************/
  1467.     double GetInclusionThreshold() const
  1468.     {
  1469.         if (! m_Local) {
  1470.             x_Throwx("Error: GetInclusionThreshold() not available.");
  1471.         }
  1472.         return m_Local->GetInclusionThreshold();
  1473.     }
  1474.     void SetInclusionThreshold(double u)
  1475.     {
  1476.         if (m_Local) {
  1477.             m_Local->SetInclusionThreshold(u);
  1478.         }
  1479.         if (m_Remote) {
  1480.             m_Remote->SetValue(eBlastOpt_InclusionThreshold, u);
  1481.         }
  1482.     }
  1483.     short GetPseudoCount() const
  1484.     {
  1485.         if (! m_Local) {
  1486.             x_Throwx("Error: GetPseudoCount() not available.");
  1487.         }
  1488.         return m_Local->GetPseudoCount();
  1489.     }
  1490.     void SetPseudoCount(short u)
  1491.     {
  1492.         if (m_Local) {
  1493.             m_Local->SetPseudoCount(u);
  1494.         }
  1495.         if (m_Remote) {
  1496.             m_Remote->SetValue(eBlastOpt_PseudoCount, u);
  1497.         }
  1498.     }
  1499.     
  1500.     
  1501.     /// Allows to dump a snapshot of the object
  1502.     void DebugDump(CDebugDumpContext ddc, unsigned int depth) const
  1503.     {
  1504.         if (m_Local) {
  1505.             m_Local->DebugDump(ddc, depth);
  1506.         }
  1507.     }
  1508.     
  1509.     void DoneDefaults() const
  1510.     {
  1511.         if (m_Remote) {
  1512.             m_Remote->DoneDefaults();
  1513.         }
  1514.     }
  1515.     
  1516. //     typedef ncbi::objects::CBlast4_queue_search_request TBlast4Req;
  1517. //     CRef<TBlast4Req> GetBlast4Request() const
  1518. //     {
  1519. //         CRef<TBlast4Req> result;
  1520.         
  1521. //         if (m_Remote) {
  1522. //             result = m_Remote->GetBlast4Request();
  1523. //         }
  1524.         
  1525. //         return result;
  1526. //     }
  1527.     
  1528.     // the "new paradigm"
  1529.     typedef ncbi::objects::CBlast4_parameters TBlast4Opts;
  1530.     TBlast4Opts * GetBlast4AlgoOpts()
  1531.     {
  1532.         TBlast4Opts * result = 0;
  1533.         
  1534.         if (m_Remote) {
  1535.             result = m_Remote->GetBlast4AlgoOpts();
  1536.         }
  1537.         
  1538.         return result;
  1539.     }
  1540.     
  1541.     bool operator==(const CBlastOptions& rhs) const;
  1542.     bool operator!=(const CBlastOptions& rhs) const;
  1543.     
  1544.     friend class CBl2Seq;
  1545.     friend class CDbBlast;
  1546.     friend class ::CBlastDbTest;        // unit test class
  1547.     friend class ::CBlastGapAlignTest;  // unit test class
  1548.     friend class ::CBlastTraceBackTest;  // unit test class
  1549.     friend class ::CScoreBlkTest;        // unit test class
  1550.     friend class ::CRPSTest;        // unit test class
  1551.     friend class ::CBlastRedoAlignmentTest;        // unit test class
  1552. protected:
  1553.     QuerySetUpOptions * GetQueryOpts() const
  1554.     {
  1555.         return m_Local ? m_Local->GetQueryOpts() : 0;
  1556.     }
  1557.     
  1558.     LookupTableOptions * GetLutOpts() const
  1559.     {
  1560.         return m_Local ? m_Local->GetLutOpts() : 0;
  1561.     }
  1562.     
  1563.     BlastInitialWordOptions * GetInitWordOpts() const
  1564.     {
  1565.         return m_Local ? m_Local->GetInitWordOpts() : 0;
  1566.     }
  1567.     
  1568.     BlastExtensionOptions * GetExtnOpts() const
  1569.     {
  1570.         return m_Local ? m_Local->GetExtnOpts() : 0;
  1571.     }
  1572.     
  1573.     BlastHitSavingOptions * GetHitSaveOpts() const
  1574.     {
  1575.         return m_Local ? m_Local->GetHitSaveOpts() : 0;
  1576.     }
  1577.     
  1578.     PSIBlastOptions * GetPSIBlastOpts() const
  1579.     {
  1580.         return m_Local ? m_Local->GetPSIBlastOpts() : 0;
  1581.     }
  1582.     
  1583.     BlastDatabaseOptions * GetDbOpts() const
  1584.     {
  1585.         return m_Local ? m_Local->GetDbOpts() : 0;
  1586.     }
  1587.     
  1588.     BlastScoringOptions * GetScoringOpts() const
  1589.     {
  1590.         return m_Local ? m_Local->GetScoringOpts() : 0;
  1591.     }
  1592.     
  1593.     BlastEffectiveLengthsOptions * GetEffLenOpts() const
  1594.     {
  1595.         return m_Local ? m_Local->GetEffLenOpts() : 0;
  1596.     }
  1597.     
  1598. private:
  1599.     /// Prohibit copy c-tor 
  1600.     CBlastOptions(const CBlastOptions& bo);
  1601.     /// Prohibit assignment operator
  1602.     CBlastOptions& operator=(const CBlastOptions& bo);
  1603.     // Pointers to local and remote objects
  1604.     
  1605.     CBlastOptionsLocal  * m_Local;
  1606.     CBlastOptionsRemote * m_Remote;
  1607.     
  1608.     void x_Throwx(const string& msg ) const
  1609.     {
  1610.         cout << "thrown: " << msg << endl;
  1611.         NCBI_THROW(CBlastException, eInternal, msg);
  1612.     }
  1613. };
  1614. inline EProgram
  1615. CBlastOptionsLocal::GetProgram() const
  1616. {
  1617.     return m_Program;
  1618. }
  1619. inline void
  1620. CBlastOptionsLocal::SetProgram(EProgram p)
  1621. {
  1622.     _ASSERT(p >= eBlastn && p < eBlastProgramMax);
  1623.     m_Program = p;
  1624. }
  1625. inline const char*
  1626. CBlastOptionsLocal::GetMatrixName() const
  1627. {
  1628.     return m_ScoringOpts->matrix;
  1629. }
  1630. inline void
  1631. CBlastOptionsLocal::SetMatrixName(const char* matrix)
  1632. {
  1633.     if (!matrix)
  1634.         return;
  1635.     sfree(m_ScoringOpts->matrix);
  1636.     m_ScoringOpts->matrix = strdup(matrix);
  1637. }
  1638. inline const char* 
  1639. CBlastOptionsLocal::GetMatrixPath() const
  1640. {
  1641.     return m_ScoringOpts->matrix_path;
  1642. }
  1643. inline void 
  1644. CBlastOptionsLocal::SetMatrixPath(const char* path)
  1645. {
  1646.     if (!path)
  1647.         return;
  1648.     sfree(m_ScoringOpts->matrix_path);
  1649.     m_ScoringOpts->matrix_path = strdup(path);
  1650. }
  1651. inline int
  1652. CBlastOptionsLocal::GetWordThreshold() const
  1653. {
  1654.     return m_LutOpts->threshold;
  1655. }
  1656. inline void
  1657. CBlastOptionsLocal::SetWordThreshold(int w)
  1658. {
  1659.     m_LutOpts->threshold = w;
  1660. }
  1661. inline int
  1662. CBlastOptionsLocal::GetLookupTableType() const
  1663. {
  1664.     return m_LutOpts->lut_type;
  1665. }
  1666. inline void
  1667. CBlastOptionsLocal::SetLookupTableType(int type)
  1668. {
  1669.     m_LutOpts->lut_type = type;
  1670.     if (type == MB_LOOKUP_TABLE) {
  1671.        m_LutOpts->max_positions = INT4_MAX;
  1672.        m_LutOpts->word_size = BLAST_WORDSIZE_MEGABLAST;
  1673.     } 
  1674. }
  1675. inline short
  1676. CBlastOptionsLocal::GetWordSize() const
  1677. {
  1678.     return m_LutOpts->word_size;
  1679. }
  1680. inline void
  1681. CBlastOptionsLocal::SetWordSize(short ws)
  1682. {
  1683.     m_LutOpts->word_size = ws;
  1684. }
  1685. inline int
  1686. CBlastOptionsLocal::GetAlphabetSize() const
  1687. {
  1688.     return m_LutOpts->alphabet_size;
  1689. }
  1690. inline void
  1691. CBlastOptionsLocal::SetAlphabetSize(int s)
  1692. {
  1693.     m_LutOpts->alphabet_size = s;
  1694. }
  1695. inline unsigned char
  1696. CBlastOptionsLocal::GetScanStep() const
  1697. {
  1698.     return m_LutOpts->scan_step;
  1699. }
  1700. inline void
  1701. CBlastOptionsLocal::SetScanStep(unsigned char s)
  1702. {
  1703.     m_LutOpts->scan_step = s;
  1704. }
  1705. inline unsigned char
  1706. CBlastOptionsLocal::GetMBTemplateLength() const
  1707. {
  1708.     return m_LutOpts->mb_template_length;
  1709. }
  1710. inline void
  1711. CBlastOptionsLocal::SetMBTemplateLength(unsigned char len)
  1712. {
  1713.     m_LutOpts->mb_template_length = len;
  1714. }
  1715. inline unsigned char
  1716. CBlastOptionsLocal::GetMBTemplateType() const
  1717. {
  1718.     return m_LutOpts->mb_template_type;
  1719. }
  1720. inline void
  1721. CBlastOptionsLocal::SetMBTemplateType(unsigned char type)
  1722. {
  1723.     m_LutOpts->mb_template_type = type;
  1724. }
  1725. inline int
  1726. CBlastOptionsLocal::GetMBMaxPositions() const
  1727. {
  1728.     return m_LutOpts->max_positions;
  1729. }
  1730. inline void
  1731. CBlastOptionsLocal::SetMBMaxPositions(int m)
  1732. {
  1733.     m_LutOpts->max_positions = m;
  1734. }
  1735. /******************* Query setup options ************************/
  1736. inline const char*
  1737. CBlastOptionsLocal::GetFilterString() const
  1738. {
  1739.     return m_QueryOpts->filter_string;
  1740. }
  1741. inline void
  1742. CBlastOptionsLocal::SetFilterString(const char* f)
  1743. {
  1744.     if (!f)
  1745.         return;
  1746.     sfree(m_QueryOpts->filter_string);
  1747. #if 0
  1748.     if (!StringICmp(f, "T")) {
  1749.         if (m_Program == eBlastn)
  1750.             m_QueryOpts->filter_string = strdup("D");
  1751.         else
  1752.             m_QueryOpts->filter_string = strdup("S");
  1753.     } else {
  1754.         m_QueryOpts->filter_string = strdup(f);
  1755.     }
  1756. #endif
  1757.     m_QueryOpts->filter_string = strdup(f);
  1758. }
  1759. inline objects::ENa_strand
  1760. CBlastOptionsLocal::GetStrandOption() const
  1761. {
  1762.     return (objects::ENa_strand) m_QueryOpts->strand_option;
  1763. }
  1764. inline void
  1765. CBlastOptionsLocal::SetStrandOption(objects::ENa_strand s)
  1766. {
  1767.     m_QueryOpts->strand_option = (unsigned char) s;
  1768. }
  1769. inline int
  1770. CBlastOptionsLocal::GetQueryGeneticCode() const
  1771. {
  1772.     return m_QueryOpts->genetic_code;
  1773. }
  1774. inline void
  1775. CBlastOptionsLocal::SetQueryGeneticCode(int gc)
  1776. {
  1777.     m_QueryOpts->genetic_code = gc;
  1778. }
  1779. /******************* Initial word options ***********************/
  1780. inline int
  1781. CBlastOptionsLocal::GetWindowSize() const
  1782. {
  1783.     return m_InitWordOpts->window_size;
  1784. }
  1785. inline void
  1786. CBlastOptionsLocal::SetWindowSize(int s)
  1787. {
  1788.     m_InitWordOpts->window_size = s;
  1789. }
  1790. inline SeedContainerType
  1791. CBlastOptionsLocal::GetSeedContainerType() const
  1792. {
  1793.     return m_InitWordOpts->container_type;
  1794. }
  1795. inline void 
  1796. CBlastOptionsLocal::SetSeedContainerType(SeedContainerType type)
  1797. {
  1798.     ASSERT(type < eMaxContainerType);
  1799.     m_InitWordOpts->container_type = type;
  1800. }
  1801. inline SeedExtensionMethod
  1802. CBlastOptionsLocal::GetSeedExtensionMethod() const
  1803. {
  1804.     return m_InitWordOpts->extension_method;
  1805. }
  1806. inline void 
  1807. CBlastOptionsLocal::SetSeedExtensionMethod(SeedExtensionMethod method)
  1808. {
  1809.     ASSERT(method < eMaxSeedExtensionMethod);
  1810.     m_InitWordOpts->extension_method = method;
  1811. }
  1812. inline bool
  1813. CBlastOptionsLocal::GetVariableWordSize() const
  1814. {
  1815.     return m_InitWordOpts->variable_wordsize ? true: false;
  1816. }
  1817. inline void 
  1818. CBlastOptionsLocal::SetVariableWordSize(bool val)
  1819. {
  1820.     m_InitWordOpts->variable_wordsize = val;
  1821. }
  1822. inline bool
  1823. CBlastOptionsLocal::GetUngappedExtension() const
  1824. {
  1825.     return m_InitWordOpts->ungapped_extension ? true : false;
  1826. }
  1827. inline void 
  1828. CBlastOptionsLocal::SetUngappedExtension(bool val)
  1829. {
  1830.     m_InitWordOpts->ungapped_extension = val;
  1831. }
  1832. inline double
  1833. CBlastOptionsLocal::GetXDropoff() const
  1834. {
  1835.     return m_InitWordOpts->x_dropoff;
  1836. }
  1837. inline void
  1838. CBlastOptionsLocal::SetXDropoff(double x)
  1839. {
  1840.     m_InitWordOpts->x_dropoff = x;
  1841. }
  1842. /******************* Gapped extension options *******************/
  1843. inline double
  1844. CBlastOptionsLocal::GetGapXDropoff() const
  1845. {
  1846.     return m_ExtnOpts->gap_x_dropoff;
  1847. }
  1848. inline void
  1849. CBlastOptionsLocal::SetGapXDropoff(double x)
  1850. {
  1851.     m_ExtnOpts->gap_x_dropoff = x;
  1852. }
  1853. inline double
  1854. CBlastOptionsLocal::GetGapXDropoffFinal() const
  1855. {
  1856.     return m_ExtnOpts->gap_x_dropoff_final;
  1857. }
  1858. inline void
  1859. CBlastOptionsLocal::SetGapXDropoffFinal(double x)
  1860. {
  1861.     m_ExtnOpts->gap_x_dropoff_final = x;
  1862. }
  1863. inline double
  1864. CBlastOptionsLocal::GetGapTrigger() const
  1865. {
  1866.     return m_ExtnOpts->gap_trigger;
  1867. }
  1868. inline void
  1869. CBlastOptionsLocal::SetGapTrigger(double g)
  1870. {
  1871.     m_ExtnOpts->gap_trigger = g;
  1872. }
  1873. inline EBlastPrelimGapExt
  1874. CBlastOptionsLocal::GetGapExtnAlgorithm() const
  1875. {
  1876.     return m_ExtnOpts->ePrelimGapExt;
  1877. }
  1878. inline void
  1879. CBlastOptionsLocal::SetGapExtnAlgorithm(EBlastPrelimGapExt a)
  1880. {
  1881.     m_ExtnOpts->ePrelimGapExt = a;
  1882. }
  1883. inline EBlastTbackExt
  1884. CBlastOptionsLocal::GetGapTracebackAlgorithm() const
  1885. {
  1886.     return m_ExtnOpts->eTbackExt;
  1887. }
  1888. inline void
  1889. CBlastOptionsLocal::SetGapTracebackAlgorithm(EBlastTbackExt a)
  1890. {
  1891.     m_ExtnOpts->eTbackExt = a;
  1892. }
  1893. inline void
  1894. CBlastOptionsLocal::SetSkipTraceback(bool skip)
  1895. {
  1896.     m_ExtnOpts->skip_traceback = skip;
  1897. }
  1898. /******************* Hit saving options *************************/
  1899. inline int
  1900. CBlastOptionsLocal::GetHitlistSize() const
  1901. {
  1902.     return m_HitSaveOpts->hitlist_size;
  1903. }
  1904. inline void
  1905. CBlastOptionsLocal::SetHitlistSize(int s)
  1906. {
  1907.     m_HitSaveOpts->hitlist_size = s;
  1908. }
  1909. inline int
  1910. CBlastOptionsLocal::GetPrelimHitlistSize() const
  1911. {
  1912.     return m_HitSaveOpts->prelim_hitlist_size;
  1913. }
  1914. inline void
  1915. CBlastOptionsLocal::SetPrelimHitlistSize(int s)
  1916. {
  1917.     m_HitSaveOpts->prelim_hitlist_size = s;
  1918. }
  1919. inline int
  1920. CBlastOptionsLocal::GetMaxNumHspPerSequence() const
  1921. {
  1922.     return m_HitSaveOpts->hsp_num_max;
  1923. }
  1924. inline void
  1925. CBlastOptionsLocal::SetMaxNumHspPerSequence(int m)
  1926. {
  1927.     m_HitSaveOpts->hsp_num_max = m;
  1928. }
  1929. inline int
  1930. CBlastOptionsLocal::GetTotalHspLimit() const
  1931. {
  1932.     return m_HitSaveOpts->total_hsp_limit;
  1933. }
  1934. inline void
  1935. CBlastOptionsLocal::SetTotalHspLimit(int l)
  1936. {
  1937.     m_HitSaveOpts->total_hsp_limit = l;
  1938. }
  1939. inline bool
  1940. CBlastOptionsLocal::GetCullingMode() const
  1941. {
  1942.     return m_HitSaveOpts->perform_culling ? true : false;
  1943. }
  1944. inline void
  1945. CBlastOptionsLocal::SetCullingMode(bool m)
  1946. {
  1947.     m_HitSaveOpts->perform_culling = m;
  1948. }
  1949. inline int
  1950. CBlastOptionsLocal::GetRequiredStart() const
  1951. {
  1952.     return m_HitSaveOpts->required_start;
  1953. }
  1954. inline void
  1955. CBlastOptionsLocal::SetRequiredStart(int s)
  1956. {
  1957.     m_HitSaveOpts->required_start = s;
  1958. }
  1959. inline int
  1960. CBlastOptionsLocal::GetRequiredEnd() const
  1961. {
  1962.     return m_HitSaveOpts->required_end;
  1963. }
  1964. inline void
  1965. CBlastOptionsLocal::SetRequiredEnd(int e)
  1966. {
  1967.     m_HitSaveOpts->required_end = e;
  1968. }
  1969. inline double
  1970. CBlastOptionsLocal::GetEvalueThreshold() const
  1971. {
  1972.     return m_HitSaveOpts->expect_value;
  1973. }
  1974. inline void
  1975. CBlastOptionsLocal::SetEvalueThreshold(double eval)
  1976. {
  1977.     m_HitSaveOpts->expect_value = eval;
  1978. }
  1979. inline double
  1980. CBlastOptionsLocal::GetOriginalEvalue() const
  1981. {
  1982.     return m_HitSaveOpts->original_expect_value;
  1983. }
  1984. #if 0
  1985. void
  1986. CBlastOptionsLocal::SetOriginalEvalue(double e)
  1987. {
  1988.     m_HitSaveOpts->original_expect_value = e;
  1989. }
  1990. #endif
  1991. inline int
  1992. CBlastOptionsLocal::GetCutoffScore() const
  1993. {
  1994.     return m_HitSaveOpts->cutoff_score;
  1995. }
  1996. inline void
  1997. CBlastOptionsLocal::SetCutoffScore(int s)
  1998. {
  1999.     m_HitSaveOpts->cutoff_score = s;
  2000. }
  2001. inline double
  2002. CBlastOptionsLocal::GetPercentIdentity() const
  2003. {
  2004.     return m_HitSaveOpts->percent_identity;
  2005. }
  2006. inline void
  2007. CBlastOptionsLocal::SetPercentIdentity(double p)
  2008. {
  2009.     m_HitSaveOpts->percent_identity = p;
  2010. }
  2011. inline bool
  2012. CBlastOptionsLocal::GetSumStatisticsMode() const
  2013. {
  2014.     return m_HitSaveOpts->do_sum_stats ? true : false;
  2015. }
  2016. inline void
  2017. CBlastOptionsLocal::SetSumStatisticsMode(bool m)
  2018. {
  2019.     m_HitSaveOpts->do_sum_stats = m;
  2020. }
  2021. inline int
  2022. CBlastOptionsLocal::GetLongestIntronLength() const
  2023. {
  2024.     return m_HitSaveOpts->longest_intron;
  2025. }
  2026. inline void
  2027. CBlastOptionsLocal::SetLongestIntronLength(int l)
  2028. {
  2029.     m_HitSaveOpts->longest_intron = l;
  2030. }
  2031. inline bool
  2032. CBlastOptionsLocal::GetGappedMode() const
  2033. {
  2034.     return m_ScoringOpts->gapped_calculation ? true : false;
  2035. }
  2036. inline void
  2037. CBlastOptionsLocal::SetGappedMode(bool m)
  2038. {
  2039.     m_ScoringOpts->gapped_calculation = m;
  2040. }
  2041. inline bool
  2042. CBlastOptionsLocal::GetNeighboringMode() const
  2043. {
  2044.     return m_HitSaveOpts->is_neighboring ? true : false;
  2045. }
  2046. inline void
  2047. CBlastOptionsLocal::SetNeighboringMode(bool m)
  2048. {
  2049.     m_HitSaveOpts->is_neighboring = m;
  2050. }
  2051. /************************ Scoring options ************************/
  2052. inline int 
  2053. CBlastOptionsLocal::GetMatchReward() const
  2054. {
  2055.     return m_ScoringOpts->reward;
  2056. }
  2057. inline void 
  2058. CBlastOptionsLocal::SetMatchReward(int r)
  2059. {
  2060.     m_ScoringOpts->reward = r;
  2061. }
  2062. inline int 
  2063. CBlastOptionsLocal::GetMismatchPenalty() const
  2064. {
  2065.     return m_ScoringOpts->penalty;
  2066. }
  2067. inline void 
  2068. CBlastOptionsLocal::SetMismatchPenalty(int p)
  2069. {
  2070.     m_ScoringOpts->penalty = p;
  2071. }
  2072. inline int 
  2073. CBlastOptionsLocal::GetGapOpeningCost() const
  2074. {
  2075.     return m_ScoringOpts->gap_open;
  2076. }
  2077. inline void 
  2078. CBlastOptionsLocal::SetGapOpeningCost(int g)
  2079. {
  2080.     m_ScoringOpts->gap_open = g;
  2081. }
  2082. inline int 
  2083. CBlastOptionsLocal::GetGapExtensionCost() const
  2084. {
  2085.     return m_ScoringOpts->gap_extend;
  2086. }
  2087. inline void 
  2088. CBlastOptionsLocal::SetGapExtensionCost(int e)
  2089. {
  2090.     m_ScoringOpts->gap_extend = e;
  2091. }
  2092. inline int 
  2093. CBlastOptionsLocal::GetFrameShiftPenalty() const
  2094. {
  2095.     return m_ScoringOpts->shift_pen;
  2096. }
  2097. inline void 
  2098. CBlastOptionsLocal::SetFrameShiftPenalty(int p)
  2099. {
  2100.     m_ScoringOpts->shift_pen = p;
  2101. }
  2102. inline int 
  2103. CBlastOptionsLocal::GetDecline2AlignPenalty() const
  2104. {
  2105.     return m_ScoringOpts->decline_align;
  2106. }
  2107. inline void 
  2108. CBlastOptionsLocal::SetDecline2AlignPenalty(int p)
  2109. {
  2110.     m_ScoringOpts->decline_align = p;
  2111. }
  2112. inline bool 
  2113. CBlastOptionsLocal::GetOutOfFrameMode() const
  2114. {
  2115.     return m_ScoringOpts->is_ooframe ? true : false;
  2116. }
  2117. inline void 
  2118. CBlastOptionsLocal::SetOutOfFrameMode(bool m)
  2119. {
  2120.     m_ScoringOpts->is_ooframe = m;
  2121. }
  2122. /******************** Effective Length options *******************/
  2123. inline Int8 
  2124. CBlastOptionsLocal::GetDbLength() const
  2125. {
  2126.     return m_EffLenOpts->db_length;
  2127. }
  2128. inline void 
  2129. CBlastOptionsLocal::SetDbLength(Int8 l)
  2130. {
  2131.     m_EffLenOpts->db_length = l;
  2132. }
  2133. inline unsigned int 
  2134. CBlastOptionsLocal::GetDbSeqNum() const
  2135. {
  2136.     return (unsigned int) m_EffLenOpts->dbseq_num;
  2137. }
  2138. inline void 
  2139. CBlastOptionsLocal::SetDbSeqNum(unsigned int n)
  2140. {
  2141.     m_EffLenOpts->dbseq_num = (Int4) n;
  2142. }
  2143. inline Int8 
  2144. CBlastOptionsLocal::GetEffectiveSearchSpace() const
  2145. {
  2146.     return m_EffLenOpts->searchsp_eff;
  2147. }
  2148.  
  2149. inline void 
  2150. CBlastOptionsLocal::SetEffectiveSearchSpace(Int8 eff)
  2151. {
  2152.     m_EffLenOpts->searchsp_eff = eff;
  2153. }
  2154. inline bool 
  2155. CBlastOptionsLocal::GetUseRealDbSize() const
  2156. {
  2157.     return m_EffLenOpts->use_real_db_size ? true : false;
  2158. }
  2159. inline void 
  2160. CBlastOptionsLocal::SetUseRealDbSize(bool u)
  2161. {
  2162.     m_EffLenOpts->use_real_db_size = u;
  2163. }
  2164. inline int 
  2165. CBlastOptionsLocal::GetDbGeneticCode() const
  2166. {
  2167.     return m_DbOpts->genetic_code;
  2168. }
  2169. inline const char* 
  2170. CBlastOptionsLocal::GetPHIPattern() const
  2171. {
  2172.     return m_LutOpts->phi_pattern;
  2173. }
  2174. inline double
  2175. CBlastOptionsLocal::GetInclusionThreshold() const
  2176. {
  2177.     return m_PSIBlastOpts->inclusion_ethresh;
  2178. }
  2179. inline void
  2180. CBlastOptionsLocal::SetInclusionThreshold(double incthr)
  2181. {
  2182.     m_PSIBlastOpts->inclusion_ethresh = incthr;
  2183. }
  2184. inline short
  2185. CBlastOptionsLocal::GetPseudoCount() const
  2186. {
  2187.     return m_PSIBlastOpts->pseudo_count;
  2188. }
  2189. inline void
  2190. CBlastOptionsLocal::SetPseudoCount(short pc)
  2191. {
  2192.     m_PSIBlastOpts->pseudo_count = pc;
  2193. }
  2194. inline void 
  2195. CBlastOptionsLocal::SetPHIPattern(const char* pattern, bool is_dna)
  2196. {
  2197.     if (!pattern)
  2198.         return;
  2199.     if (is_dna)
  2200.        m_LutOpts->lut_type = PHI_NA_LOOKUP;
  2201.     else
  2202.        m_LutOpts->lut_type = PHI_AA_LOOKUP;
  2203.     m_LutOpts->phi_pattern = strdup(pattern);
  2204.     m_HitSaveOpts->phi_align = TRUE;
  2205. }
  2206. END_SCOPE(blast)
  2207. END_NCBI_SCOPE
  2208. /* @} */
  2209. /*
  2210. * ===========================================================================
  2211. *
  2212. * $Log: blast_options.hpp,v $
  2213. * Revision 1000.2  2004/06/01 18:02:42  gouriano
  2214. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.61
  2215. *
  2216. * Revision 1.61  2004/05/19 14:52:00  camacho
  2217. * 1. Added doxygen tags to enable doxygen processing of algo/blast/core
  2218. * 2. Standardized copyright, CVS $Id string, $Log and rcsid formatting and i
  2219. *    location
  2220. * 3. Added use of @todo doxygen keyword
  2221. *
  2222. * Revision 1.60  2004/05/18 13:20:35  madden
  2223. * Add CBlastRedoAlignmentTest as friend class
  2224. *
  2225. * Revision 1.59  2004/05/18 12:48:24  madden
  2226. * Add setter and getter for GapTracebackAlgorithm (EBlastTbackExt)
  2227. *
  2228. * Revision 1.58  2004/05/17 18:07:19  bealer
  2229. * - Add PSI Blast support.
  2230. *
  2231. * Revision 1.57  2004/05/17 15:28:24  madden
  2232. * Int algorithm_type replaced with enum EBlastPrelimGapExt
  2233. *
  2234. * Revision 1.56  2004/04/07 15:11:33  papadopo
  2235. * add RPS unit test as friend class
  2236. *
  2237. * Revision 1.55  2004/03/30 15:47:37  madden
  2238. * Add CScoreBlkTest as friend class
  2239. *
  2240. * Revision 1.54  2004/03/19 18:56:04  camacho
  2241. * Move to doxygen AlgoBlast group
  2242. *
  2243. * Revision 1.53  2004/03/09 18:41:06  dondosha
  2244. * Removed single hsp cutoff evalue and score, since these are calculated, and not set by user
  2245. *
  2246. * Revision 1.52  2004/02/27 19:44:38  madden
  2247. * Add  CBlastTraceBackTest (unit test) as friend class
  2248. *
  2249. * Revision 1.51  2004/02/24 23:22:59  bealer
  2250. * - Fix glitch in Validate().
  2251. *
  2252. * Revision 1.50  2004/02/24 22:42:11  bealer
  2253. * - Remove undefined methods from CBlastOptionsRemote.
  2254. *
  2255. * Revision 1.49  2004/02/24 13:16:35  dondosha
  2256. * Commented out argument names in unimplemented function, to eliminate compiler warnings
  2257. *
  2258. * Revision 1.48  2004/02/20 19:54:26  camacho
  2259. * Correct friendship declarations for unit test classes
  2260. *
  2261. * Revision 1.47  2004/02/17 23:52:08  dondosha
  2262. * Added methods to get/set preliminary hitlist size
  2263. *
  2264. * Revision 1.46  2004/02/10 19:46:19  dondosha
  2265. * Added friend class CBlastDbTest
  2266. *
  2267. * Revision 1.45  2004/01/20 17:54:50  bealer
  2268. * - Add SkipTraceback option.
  2269. *
  2270. * Revision 1.44  2004/01/20 17:06:39  camacho
  2271. * Made operator== a member function
  2272. *
  2273. * Revision 1.43  2004/01/20 16:42:16  camacho
  2274. * Do not use runtime_error, use NCBI Exception classes
  2275. *
  2276. * Revision 1.42  2004/01/17 23:03:41  dondosha
  2277. * There is no LCaseMask option any more, so [SG]EtLCaseMask methods removed
  2278. *
  2279. * Revision 1.41  2004/01/17 02:38:23  ucko
  2280. * Initialize variables with = rather than () when possible to avoid
  2281. * confusing MSVC's parser.
  2282. *
  2283. * Revision 1.40  2004/01/17 00:52:18  ucko
  2284. * Remove excess comma at the end of EBlastOptIdx (problematic on WorkShop)
  2285. *
  2286. * Revision 1.39  2004/01/17 00:15:06  ucko
  2287. * Substitute Int8 for non-portable "long long"
  2288. *
  2289. * Revision 1.38  2004/01/16 21:40:01  bealer
  2290. * - Add Blast4 API support to the CBlastOptions class.
  2291. *
  2292. * Revision 1.37  2004/01/13 14:54:54  dondosha
  2293. * Grant friendship to class CBlastGapAlignTest for gapped alignment unit test
  2294. *
  2295. * Revision 1.36  2003/12/17 21:09:33  camacho
  2296. * Add comments to reward/mismatch; gap open/extension costs
  2297. *
  2298. * Revision 1.35  2003/12/03 16:34:09  dondosha
  2299. * Added setter for skip_traceback option; changed SetDbGeneticCode so it fills both integer and string
  2300. *
  2301. * Revision 1.34  2003/11/26 18:22:14  camacho
  2302. * +Blast Option Handle classes
  2303. *
  2304. * Revision 1.33  2003/11/12 18:41:02  camacho
  2305. * Remove side effects from mutators
  2306. *
  2307. * Revision 1.32  2003/11/04 17:13:01  dondosha
  2308. * Set boolean is_ooframe option when needed
  2309. *
  2310. * Revision 1.31  2003/10/30 19:37:01  dondosha
  2311. * Removed gapped_calculation from BlastHitSavingOptions structure
  2312. *
  2313. * Revision 1.30  2003/10/21 22:15:33  camacho
  2314. * Rearranging of C options structures, fix seed extension method
  2315. *
  2316. * Revision 1.29  2003/10/21 17:31:06  camacho
  2317. * Renaming of gap open/extension accessors/mutators
  2318. *
  2319. * Revision 1.28  2003/10/21 15:36:25  camacho
  2320. * Remove unnecessary side effect when setting frame shift penalty
  2321. *
  2322. * Revision 1.27  2003/10/17 18:43:14  dondosha
  2323. * Use separate variables for different initial word extension options
  2324. *
  2325. * Revision 1.26  2003/10/07 17:27:38  dondosha
  2326. * Lower case mask removed from options, added to the SSeqLoc structure
  2327. *
  2328. * Revision 1.25  2003/09/26 15:42:42  dondosha
  2329. * Added second argument to SetExtendWordMethod, so bit can be set or unset
  2330. *
  2331. * Revision 1.24  2003/09/25 15:25:22  dondosha
  2332. * Set phi_align in hit saving options for PHI BLAST
  2333. *
  2334. * Revision 1.23  2003/09/11 17:44:39  camacho
  2335. * Changed CBlastOption -> CBlastOptions
  2336. *
  2337. * Revision 1.22  2003/09/09 22:07:57  dondosha
  2338. * Added accessor functions for PHI pattern
  2339. *
  2340. * Revision 1.21  2003/09/03 19:35:51  camacho
  2341. * Removed unneeded prototype
  2342. *
  2343. * Revision 1.20  2003/08/28 22:32:53  camacho
  2344. * Correct typo
  2345. *
  2346. * Revision 1.19  2003/08/21 19:30:17  dondosha
  2347. * Free previous value of gen_code_string and allocate memory for new one in SetDbGeneticCodeStr
  2348. *
  2349. * Revision 1.18  2003/08/19 22:11:16  dondosha
  2350. * Cosmetic changes
  2351. *
  2352. * Revision 1.17  2003/08/19 20:22:05  dondosha
  2353. * EProgram definition moved from CBlastOptions clase to blast scope
  2354. *
  2355. * Revision 1.16  2003/08/19 13:45:21  dicuccio
  2356. * Removed 'USING_SCOPE(objects)'.  Changed #include guards to be standards
  2357. * compliant.  Added 'objects::' where necessary.
  2358. *
  2359. * Revision 1.15  2003/08/18 20:58:56  camacho
  2360. * Added blast namespace, removed *__.hpp includes
  2361. *
  2362. * Revision 1.14  2003/08/14 19:06:51  dondosha
  2363. * Added BLASTGetEProgram function to convert from Uint1 to enum type
  2364. *
  2365. * Revision 1.13  2003/08/11 19:55:04  camacho
  2366. * Early commit to support query concatenation and the use of multiple scopes.
  2367. * Compiles, but still needs work.
  2368. *
  2369. * Revision 1.12  2003/08/11 15:23:23  dondosha
  2370. * Renamed conversion functions between BlastMask and CSeqLoc; added algo/blast/core to headers from core BLAST library
  2371. *
  2372. * Revision 1.11  2003/08/11 13:58:51  dicuccio
  2373. * Added export specifiers.  Fixed problem with unimplemented private copy ctor
  2374. * (truly make unimplemented)
  2375. *
  2376. * Revision 1.10  2003/08/08 19:42:14  dicuccio
  2377. * Compilation fixes: #include file relocation; fixed use of 'list' and 'vector'
  2378. * as variable names
  2379. *
  2380. * Revision 1.9  2003/08/01 22:34:11  camacho
  2381. * Added accessors/mutators/defaults for matrix_path
  2382. *
  2383. * Revision 1.8  2003/07/31 19:45:33  camacho
  2384. * Eliminate Ptr notation
  2385. *
  2386. * Revision 1.7  2003/07/30 19:56:19  coulouri
  2387. * remove matrixname
  2388. *
  2389. * Revision 1.6  2003/07/30 15:00:01  camacho
  2390. * Do not use Malloc/MemNew/MemFree
  2391. *
  2392. * Revision 1.5  2003/07/30 13:55:09  coulouri
  2393. * use strdup()
  2394. *
  2395. * Revision 1.4  2003/07/23 21:29:37  camacho
  2396. * Update BlastDatabaseOptions
  2397. *
  2398. * Revision 1.3  2003/07/16 19:51:12  camacho
  2399. * Removed logic of default setting from mutator member functions
  2400. *
  2401. * Revision 1.2  2003/07/14 22:17:17  camacho
  2402. * Convert CSeq_loc to BlastMaskPtr
  2403. *
  2404. * Revision 1.1  2003/07/10 18:34:19  camacho
  2405. * Initial revision
  2406. *
  2407. *
  2408. * ===========================================================================
  2409. */
  2410. #endif  /* ALGO_BLAST_API___BLAST_OPTION__HPP */