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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: blast_nucl_options.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 18:05:41  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.11
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: blast_nucl_options.cpp,v 1000.2 2004/06/01 18:05:41 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Authors:  Christiam Camacho
  35.  *
  36.  */
  37. /// @file blast_nucl_options.cpp
  38. /// Implements the CBlastNucleotideOptionsHandle class.
  39. #include <ncbi_pch.hpp>
  40. #include <algo/blast/core/blast_encoding.h>
  41. #include <algo/blast/api/blast_nucl_options.hpp>
  42. #include <objects/seqloc/Na_strand.hpp>
  43. #include "blast_setup.hpp"
  44. /** @addtogroup AlgoBlast
  45.  *
  46.  * @{
  47.  */
  48. BEGIN_NCBI_SCOPE
  49. BEGIN_SCOPE(blast)
  50. CBlastNucleotideOptionsHandle::CBlastNucleotideOptionsHandle(EAPILocality locality)
  51.     : CBlastOptionsHandle(locality)
  52. {
  53.     SetDefaults();
  54. }
  55. void
  56. CBlastNucleotideOptionsHandle::SetDefaults()
  57. {
  58.     SetTraditionalMegablastDefaults();
  59.     m_Opts->SetProgram(eBlastn);
  60. }
  61. void
  62. CBlastNucleotideOptionsHandle::SetTraditionalBlastnDefaults()
  63. {
  64.     if (m_Opts->GetLocality() == CBlastOptions::eRemote) {
  65.         return;
  66.     }
  67.     SetQueryOptionDefaults();
  68.     SetLookupTableDefaults();
  69.     // NB: Initial word defaults must be set after lookup table defaults, 
  70.     // because default scanning stride depends on the lookup table type.
  71.     SetInitialWordOptionsDefaults();
  72.     SetGappedExtensionDefaults();
  73.     SetScoringOptionsDefaults();
  74.     SetHitSavingOptionsDefaults();
  75.     SetEffectiveLengthsOptionsDefaults();
  76. }
  77. void
  78. CBlastNucleotideOptionsHandle::SetTraditionalMegablastDefaults()
  79. {
  80.     if (m_Opts->GetLocality() == CBlastOptions::eRemote) {
  81.         return;
  82.     }
  83.     SetQueryOptionDefaults();
  84.     SetMBLookupTableDefaults();
  85.     // NB: Initial word defaults must be set after lookup table defaults, 
  86.     // because default scanning stride depends on the lookup table type.
  87.     SetMBInitialWordOptionsDefaults();
  88.     SetMBGappedExtensionDefaults();
  89.     SetMBScoringOptionsDefaults();
  90.     SetHitSavingOptionsDefaults();
  91.     SetEffectiveLengthsOptionsDefaults();
  92. }
  93. void 
  94. CBlastNucleotideOptionsHandle::SetLookupTableDefaults()
  95. {
  96.     SetLookupTableType(NA_LOOKUP_TABLE);
  97.     SetWordSize(BLAST_WORDSIZE_NUCL);
  98.     m_Opts->SetWordThreshold(BLAST_WORD_THRESHOLD_BLASTN);
  99.     SetAlphabetSize(BLASTNA_SIZE);
  100.     unsigned int stride = CalculateBestStride(GetWordSize(), 
  101.                                               BLAST_VARWORD_NUCL, 
  102.                                               GetLookupTableType());
  103.     SetScanStep(stride);
  104. }
  105. void 
  106. CBlastNucleotideOptionsHandle::SetMBLookupTableDefaults()
  107. {
  108.     SetLookupTableType(MB_LOOKUP_TABLE);
  109.     SetWordSize(BLAST_WORDSIZE_MEGABLAST);
  110.     m_Opts->SetWordThreshold(BLAST_WORD_THRESHOLD_MEGABLAST);
  111.     m_Opts->SetMBMaxPositions(INT4_MAX);
  112.     SetAlphabetSize(BLASTNA_SIZE);
  113.     // Note: stride makes no sense in the context of eRight extension 
  114.     // method
  115.     unsigned int stride = CalculateBestStride(GetWordSize(), 
  116.                                               BLAST_VARWORD_MEGABLAST, 
  117.                                               GetLookupTableType());
  118.     SetScanStep(stride);
  119. }
  120. void
  121. CBlastNucleotideOptionsHandle::SetQueryOptionDefaults()
  122. {
  123.     SetFilterString("D");
  124.     SetStrandOption(objects::eNa_strand_both);
  125. }
  126. void
  127. CBlastNucleotideOptionsHandle::SetInitialWordOptionsDefaults()
  128. {
  129.     SetXDropoff(BLAST_UNGAPPED_X_DROPOFF_NUCL);
  130.     SetWindowSize(BLAST_WINDOW_SIZE_NUCL);
  131.     SetSeedContainerType(eDiagArray);
  132.     SetVariableWordSize(BLAST_VARWORD_NUCL);
  133.     SetSeedExtensionMethod(eRightAndLeft);
  134.     SetUngappedExtension();
  135. }
  136. void
  137. CBlastNucleotideOptionsHandle::SetMBInitialWordOptionsDefaults()
  138. {
  139.     SetWindowSize(BLAST_WINDOW_SIZE_NUCL);
  140.     SetSeedContainerType(eDiagArray);
  141.     SetVariableWordSize(BLAST_VARWORD_MEGABLAST);
  142.     SetSeedExtensionMethod(eRightAndLeft);
  143. }
  144. void
  145. CBlastNucleotideOptionsHandle::SetGappedExtensionDefaults()
  146. {
  147.     SetGapXDropoff(BLAST_GAP_X_DROPOFF_NUCL);
  148.     SetGapXDropoffFinal(BLAST_GAP_X_DROPOFF_FINAL_NUCL);
  149.     SetGapTrigger(BLAST_GAP_TRIGGER_NUCL);
  150.     SetGapExtnAlgorithm(eDynProgExt);
  151. }
  152. void
  153. CBlastNucleotideOptionsHandle::SetMBGappedExtensionDefaults()
  154. {
  155.     SetGapXDropoff(BLAST_GAP_X_DROPOFF_NUCL);
  156.     SetGapXDropoffFinal(BLAST_GAP_X_DROPOFF_FINAL_NUCL);
  157.     SetGapTrigger(BLAST_GAP_TRIGGER_NUCL);
  158.     SetGapExtnAlgorithm(eGreedyWithTracebackExt);
  159. }
  160. void
  161. CBlastNucleotideOptionsHandle::SetScoringOptionsDefaults()
  162. {
  163.     SetMatrixName(NULL);
  164.     SetMatrixPath(FindMatrixPath(GetMatrixName(), false).c_str());
  165.     SetGapOpeningCost(BLAST_GAP_OPEN_NUCL);
  166.     SetGapExtensionCost(BLAST_GAP_EXTN_NUCL);
  167.     SetMatchReward(BLAST_REWARD);
  168.     SetMismatchPenalty(BLAST_PENALTY);
  169.     SetGappedMode();
  170.     // set out-of-frame options to invalid? values
  171.     m_Opts->SetOutOfFrameMode(false);
  172.     m_Opts->SetFrameShiftPenalty(INT2_MAX);
  173.     m_Opts->SetDecline2AlignPenalty(INT2_MAX);
  174. }
  175. void
  176. CBlastNucleotideOptionsHandle::SetMBScoringOptionsDefaults()
  177. {
  178.     SetMatrixName(NULL);
  179.     SetMatrixPath(FindMatrixPath(GetMatrixName(), false).c_str());
  180.     SetGapOpeningCost(BLAST_GAP_OPEN_MEGABLAST);
  181.     SetGapExtensionCost(BLAST_GAP_EXTN_MEGABLAST);
  182.     SetMatchReward(BLAST_REWARD);
  183.     SetMismatchPenalty(BLAST_PENALTY);
  184.     SetGappedMode();
  185.     // set out-of-frame options to invalid? values
  186.     m_Opts->SetOutOfFrameMode(false);
  187.     m_Opts->SetFrameShiftPenalty(INT2_MAX);
  188.     m_Opts->SetDecline2AlignPenalty(INT2_MAX);
  189. }
  190. void
  191. CBlastNucleotideOptionsHandle::SetHitSavingOptionsDefaults()
  192. {
  193.     SetHitlistSize(500);
  194.     SetPrelimHitlistSize(550);
  195.     SetEvalueThreshold(BLAST_EXPECT_VALUE);
  196.     SetPercentIdentity(0);
  197.     // set some default here, allow INT4MAX to mean infinity
  198.     SetMaxNumHspPerSequence(0); 
  199.     // this is never used... altough it could be calculated
  200.     //m_Opts->SetTotalHspLimit(FIXME);
  201.     SetCutoffScore(0); // will be calculated based on evalue threshold,
  202.     // effective lengths and Karlin-Altschul params in BLAST_Cutoffs_simple
  203.     // and passed to the engine in the params structure
  204.     // not applicable
  205.     m_Opts->SetRequiredStart(0);
  206.     m_Opts->SetRequiredEnd(0);
  207. }
  208. void
  209. CBlastNucleotideOptionsHandle::SetEffectiveLengthsOptionsDefaults()
  210. {
  211.     SetDbLength(0);
  212.     SetDbSeqNum(1);
  213.     SetEffectiveSearchSpace(0);
  214.     SetUseRealDbSize();
  215. }
  216. void
  217. CBlastNucleotideOptionsHandle::SetSubjectSequenceOptionsDefaults()
  218. {}
  219. END_SCOPE(blast)
  220. END_NCBI_SCOPE
  221. /* @} */
  222. /*
  223.  * ===========================================================================
  224.  * $Log: blast_nucl_options.cpp,v $
  225.  * Revision 1000.2  2004/06/01 18:05:41  gouriano
  226.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.11
  227.  *
  228.  * Revision 1.11  2004/05/21 21:41:02  gorelenk
  229.  * Added PCH ncbi_pch.hpp
  230.  *
  231.  * Revision 1.10  2004/05/17 15:32:39  madden
  232.  * Int algorithm_type replaced with enum EBlastPrelimGapExt
  233.  *
  234.  * Revision 1.9  2004/04/07 03:06:15  camacho
  235.  * Added blast_encoding.[hc], refactoring blast_stat.[hc]
  236.  *
  237.  * Revision 1.8  2004/03/22 20:15:26  dondosha
  238.  * Set final x-dropoff for MB extension defaults
  239.  *
  240.  * Revision 1.7  2004/03/19 15:13:34  camacho
  241.  * Move to doxygen group AlgoBlast
  242.  *
  243.  * Revision 1.6  2004/03/17 19:15:28  dondosha
  244.  * Corrected order of defaults setting, so scanning stride is set properly
  245.  *
  246.  * Revision 1.5  2004/03/11 17:27:12  camacho
  247.  * Fix incorrect doxygen file directive
  248.  *
  249.  * Revision 1.4  2004/02/17 23:53:31  dondosha
  250.  * Added setting of preliminary hitlist size
  251.  *
  252.  * Revision 1.3  2004/02/10 19:47:46  dondosha
  253.  * Added SetMBGappedExtensionDefaults method; corrected megablast defaults setting
  254.  *
  255.  * Revision 1.2  2004/01/16 21:49:26  bealer
  256.  * - Add locality flag for Blast4 API
  257.  *
  258.  * Revision 1.1  2003/11/26 18:23:59  camacho
  259.  * +Blast Option Handle classes
  260.  *
  261.  * ===========================================================================
  262.  */