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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: blast_options.h,v $
  4.  * PRODUCTION Revision 1000.4  2004/06/01 18:03:39  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.76
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: blast_options.h,v 1000.4 2004/06/01 18:03:39 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 offical 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:  Tom Madden
  35.  *
  36.  */
  37. /** @file blast_options.h
  38.  * Options to be used for different stages of the BLAST search.
  39.  */
  40. #ifndef __BLASTOPTIONS__
  41. #define __BLASTOPTIONS__
  42. #include <algo/blast/core/blast_def.h>
  43. #include <algo/blast/core/blast_message.h>
  44. #include <algo/blast/core/blast_stat.h>
  45. #ifdef __cplusplus
  46. extern "C" {
  47. #endif
  48. /** Some default values (used when creating blast options block and for
  49.  * command-line program defaults. When changing these defaults, please
  50.  * remember to update the defaults in the command-line programs 
  51.  */
  52. /** "window" between hits to trigger an extension. */
  53. #define BLAST_WINDOW_SIZE_PROT 40  /**< default window (all protein searches) */
  54. #define BLAST_WINDOW_SIZE_NUCL 0   /**< default window size (blastn) */
  55. #define BLAST_WINDOW_SIZE_MEGABLAST 0   /**< default window size 
  56.                                           (contiguous megablast) */
  57. #define BLAST_WINDOW_SIZE_DISC 40  /**< default window size 
  58.                                           (discontiguous megablast) */
  59. /** length of word to trigger an extension. */
  60. #define BLAST_WORDSIZE_PROT 3   /**< default word size (all protein searches) */
  61. #define BLAST_WORDSIZE_NUCL 11   /**< default word size (blastn) */
  62. #define BLAST_WORDSIZE_MEGABLAST 28   /**< default word size (contiguous 
  63.                                           megablast; for discontig megablast
  64.                                           the word size is explicitly 
  65.                                           overridden) */
  66. #define BLAST_VARWORD_NUCL 0  /**< blastn with variable wordsize */
  67. #define BLAST_VARWORD_MEGABLAST 1 /**< megablast with variable wordsize */
  68. /** Protein gap costs are the defaults for the BLOSUM62 scoring matrix.
  69.  * More gap costs are listed in BLASTOptionSetGapParams 
  70.  */
  71. /** cost for the existence of a gap.*/
  72. #define BLAST_GAP_OPEN_PROT 11 /**< default gap open penalty (all 
  73.                                     protein searches) */
  74. #define BLAST_GAP_OPEN_NUCL 5 /**< default gap open penalty (blastn) */
  75. #define BLAST_GAP_OPEN_MEGABLAST 0 /**< default gap open penalty (megablast
  76.                                         with greedy gapped alignment) */
  77. /** cost to extend a gap. */
  78. #define BLAST_GAP_EXTN_PROT 1 /**< default gap open penalty (all 
  79.                                    protein searches) */
  80. #define BLAST_GAP_EXTN_NUCL 2 /**< default gap open penalty (blastn) */
  81. #define BLAST_GAP_EXTN_MEGABLAST 0 /**< default gap open penalty (megablast)
  82.                                         with greedy gapped alignment) */
  83. /** neighboring word score thresholds; a threshold of zero
  84.  *  means that only query and subject words that match exactly
  85.  *  will go into the BLAST lookup table when it is generated 
  86.  */
  87. #define BLAST_WORD_THRESHOLD_BLASTP 11 /**< default neighboring threshold
  88.                                          (blastp/rpsblast) */
  89. #define BLAST_WORD_THRESHOLD_BLASTN 0 /**< default threshold (blastn) */
  90. #define BLAST_WORD_THRESHOLD_BLASTX 12 /**< default threshold (blastx) */
  91. #define BLAST_WORD_THRESHOLD_TBLASTN 13 /**< default neighboring threshold 
  92.                                           (tblastn/rpstblastn) */
  93. #define BLAST_WORD_THRESHOLD_TBLASTX 13 /**< default threshold (tblastx) */
  94. #define BLAST_WORD_THRESHOLD_MEGABLAST 0 /**< default threshold (megablast) */
  95. /** default dropoff for ungapped extension; ungapped extensions
  96.  *  will stop when the score for the extension has dropped from
  97.  *  the current best score by at least this much 
  98.  */
  99. #define BLAST_UNGAPPED_X_DROPOFF_PROT 7 /**< ungapped dropoff score for all
  100.                                              searches except blastn */
  101. #define BLAST_UNGAPPED_X_DROPOFF_NUCL 20 /**< ungapped dropoff score for 
  102.                                               blastn (and megablast) */
  103. /** default dropoff for preliminary gapped extensions */
  104. #define BLAST_GAP_X_DROPOFF_PROT 15 /**< default dropoff (all protein-
  105.                                          based gapped extensions) */
  106. #define BLAST_GAP_X_DROPOFF_NUCL 30 /**< default dropoff for non-greedy
  107.                                          nucleotide gapped extensions */
  108. #define BLAST_GAP_X_DROPOFF_GREEDY 30 /**< default dropoff for greedy
  109.                                          nucleotide gapped extensions */
  110. #define BLAST_GAP_X_DROPOFF_TBLASTX 0 /**< default dropoff for tblastx */
  111. /** default bit score that will trigger gapped extension */
  112. #define BLAST_GAP_TRIGGER_PROT 22.0 /**< default bit score that will trigger
  113.                                          a gapped extension for all protein-
  114.                                          based searches */
  115. #define BLAST_GAP_TRIGGER_NUCL 25.0  /**< default bit score that will trigger
  116.                                          a gapped extension for blastn */
  117. /** default dropoff for the final gapped extension with traceback */
  118. #define BLAST_GAP_X_DROPOFF_FINAL_PROT 25 /**< default dropoff (all protein-
  119.                                                based gapped extensions) */
  120. #define BLAST_GAP_X_DROPOFF_FINAL_NUCL 50 /**< default dropoff for nucleotide
  121.                                                gapped extensions) */
  122. #define BLAST_GAP_X_DROPOFF_FINAL_TBLASTX 0 /**< default dropoff for tblastx */
  123. /** default reward and penalty (only applies to blastn/megablast) */
  124. #define BLAST_PENALTY -3        /**< default nucleotide mismatch score */
  125. #define BLAST_REWARD 1          /**< default nucleotide match score */
  126. #define BLAST_EXPECT_VALUE 10.0 /**< by default, alignments whose expect
  127.                                      value exceeds this number are discarded */
  128. /** Types of the lookup table */
  129. #define MB_LOOKUP_TABLE 1  /**< megablast lookup table (includes both
  130.                                 contiguous and discontiguous megablast) */
  131. #define NA_LOOKUP_TABLE 2  /**< blastn lookup table */
  132. #define AA_LOOKUP_TABLE 3  /**< standard protein (blastp) lookup table */
  133. #define PHI_AA_LOOKUP 4  /**< protein lookup table specialized for phi-blast */
  134. #define PHI_NA_LOOKUP 5  /**< nucleotide lookup table for phi-blast */
  135. #define RPS_LOOKUP_TABLE 6 /**< RPS lookup table (rpsblast and rpstblastn) */
  136. /** Defaults for PSI-BLAST options */
  137. #define PSI_INCLUSION_ETHRESH 0.002
  138. #define PSI_PSEUDO_COUNT_CONST 9
  139. /** Default genetic code for query and/or database */
  140. #define BLAST_GENETIC_CODE 1  /**< Use the standard genetic code for converting
  141.                                    groups of three nucleotide bases to protein
  142.                                    letters */
  143. /** Default parameters for linking HSPs */
  144. #define BLAST_GAP_PROB 0.5
  145. #define BLAST_GAP_PROB_GAPPED 1.0
  146. #define BLAST_GAP_DECAY_RATE 0.5 
  147. #define BLAST_GAP_DECAY_RATE_GAPPED 0.1
  148. #define BLAST_GAP_SIZE 50
  149. /** Options needed to construct a lookup table 
  150.  * Also needed: query sequence and query length.
  151.  */
  152. typedef struct LookupTableOptions {
  153.    Int4 threshold; /**< Score threshold for putting words in a lookup table */
  154.    Int4 lut_type; /**< What kind of lookup table to construct? E.g. blastn 
  155.                      allows for traditional and megablast style lookup table */
  156.    Int2 word_size; /**< Determines the size of the lookup table */
  157.    Int4 alphabet_size; /**< Size of the alphabet */
  158.    Uint1 mb_template_length; /**< Length of the discontiguous words */
  159.    Uint1 mb_template_type; /**< Type of a discontiguous word template */
  160.    Int4 max_positions; /**< Max number of positions per word (MegaBlast only);
  161.                          no restriction if 0 */
  162.    Uint1 scan_step; /**< Step at which database sequence should be parsed */
  163.    char* phi_pattern;  /**< PHI-BLAST pattern */
  164.    Int4 max_num_patterns; /**< Maximal number of patterns allowed for 
  165.                              PHI-BLAST */
  166.    Boolean use_pssm; /**< Use a PSSM rather than a (protein) query to construct lookup table */
  167. } LookupTableOptions;
  168. /** Options required for setting up the query sequence */
  169. typedef struct QuerySetUpOptions {
  170.    char* filter_string; /**< Parseable string that determines the filtering
  171.                              options */
  172.    Uint1 strand_option; /**< In blastn: which strand to search: 1 = forward;
  173.                            2 = reverse; 3 = both */
  174.    Int4 genetic_code;     /**< Genetic code to use for translation, 
  175.                              [t]blastx only */
  176. } QuerySetUpOptions;
  177. /** specifies the data structures used for bookkeeping
  178.  *  during computation of ungapped extensions 
  179.  */
  180. typedef enum SeedContainerType {
  181.     eDiagArray,         /**< use diagonal structures */
  182.     eMbStacks,          /**< use stacks (megablast only) */
  183.     eMaxContainerType   /**< maximum value for this enumeration */
  184. } SeedContainerType;
  185. /** when performing mini-extensions on hits from the
  186.  *  blastn or megablast lookup table, this determines
  187.  *  the direction in which the mini-extension is attempted 
  188.  */
  189. typedef enum SeedExtensionMethod {
  190.     eRight,             /**< extend only to the right */
  191.     eRightAndLeft,      /**< extend to left and right (used with AG method) */
  192.     eMaxSeedExtensionMethod   /**< maximum value for this enumeration */
  193. } SeedExtensionMethod;
  194. /** Options needed for initial word finding and processing */
  195. typedef struct BlastInitialWordOptions {
  196.    Int4 window_size; /**< Maximal allowed distance between 2 hits in case 2 
  197.                         hits are required to trigger the extension */
  198.    SeedContainerType container_type; /**< How to store offset pairs for initial
  199.                                         seeds? */
  200.    SeedExtensionMethod extension_method; /**< How should exact matches be 
  201.                                             extended? */
  202.    Boolean variable_wordsize; /**< Should the partial bytes be examined for 
  203.                              determining whether exact match is long enough? */
  204.    Boolean ungapped_extension; /**< Should the ungapped extension be 
  205.                                   performed? */
  206.    double x_dropoff; /**< X-dropoff value (in bits) for the ungapped 
  207.                          extension */
  208. } BlastInitialWordOptions;
  209. /** Expect values corresponding to the default cutoff
  210.  *  scores for ungapped alignments 
  211.  */
  212. #define UNGAPPED_CUTOFF_E_BLASTN 0.05  /**< default ungapped evalue (blastn) */
  213. #define UNGAPPED_CUTOFF_E_BLASTP 1e-300 /**< default ungapped evalue (blastp) */
  214. #define UNGAPPED_CUTOFF_E_BLASTX 1.0  /**< default ungapped evalue (blastx) */
  215. #define UNGAPPED_CUTOFF_E_TBLASTN 1.0  /**< default ungapped evalue (tblastn) */
  216. #define UNGAPPED_CUTOFF_E_TBLASTX 1e-300  /**< default ungapped evalue (tblastx) */
  217. /** Parameter block that contains a pointer to BlastInitialWordOptions
  218.  * and parsed values for those options that require it 
  219.  * (in this case x_dropoff).
  220.  */
  221. typedef struct BlastInitialWordParameters {
  222.    BlastInitialWordOptions* options; /**< The original (unparsed) options. */
  223.    Int4 x_dropoff; /**< Raw X-dropoff value for the ungapped extension */
  224.    Int4 cutoff_score; /**< Cutoff score for saving ungapped hits. */
  225. } BlastInitialWordParameters;
  226. /** The algorithm to be used for preliminary
  227.  *  gapped extensions
  228.  */
  229. typedef enum EBlastPrelimGapExt {
  230.     eDynProgExt,                /**< standard affine gapping */
  231.     eGreedyExt,                 /**< Greedy extension (megaBlast) */
  232.     eGreedyWithTracebackExt     /**< Greedy extension with Traceback
  233.                                calculated. */
  234. } EBlastPrelimGapExt;
  235. /** The algorithm to be used for final gapped
  236.  *  extensions with traceback
  237.  */
  238. typedef enum EBlastTbackExt {
  239.     eDynProgTbck,          /**< standard affine gapping */
  240.     eGreedyTbck,           /**< Greedy extension (megaBlast) */
  241.     eSmithWatermanTbck     /**< Smith-waterman finds optimal scores, then ALIGN_EX
  242.                             to find alignment. */
  243. } EBlastTbackExt;
  244. /** Options used for gapped extension 
  245.  *  These include:
  246.  *  a. Penalties for various types of gapping;
  247.  *  b. Drop-off values for the extension algorithms tree exploration;
  248.  *  c. Parameters identifying what kind of extension algorithm(s) should 
  249.  *     be used.
  250.  */
  251. typedef struct BlastExtensionOptions {
  252.    double gap_x_dropoff; /**< X-dropoff value for gapped extension (in bits) */
  253.    double gap_x_dropoff_final;/**< X-dropoff value for the final gapped 
  254.                                   extension (in bits) */
  255.    double gap_trigger; /**< Score in bits for starting gapped extension */
  256.    EBlastPrelimGapExt ePrelimGapExt; /**< type of preliminary gapped extension (normally) for calculating
  257.                               score. */
  258.    EBlastTbackExt eTbackExt; /**< type of traceback extension. */
  259.    Boolean compositionBasedStats; /**< if TRUE use composition-based stats. */
  260.    Boolean skip_traceback; /**< @deprecated Is traceback information needed in results? */
  261. } BlastExtensionOptions;
  262. /** Computed values used as parameters for gapped alignments */
  263. typedef struct BlastExtensionParameters {
  264.    BlastExtensionOptions* options; /**< The original (unparsed) options. */
  265.    Int4 gap_x_dropoff; /**< X-dropoff value for gapped extension (raw) */
  266.    Int4 gap_x_dropoff_final;/**< X-dropoff value for the final gapped 
  267.                                extension (raw) */
  268.    Int4 gap_trigger; /**< Minimal raw score for starting gapped extension */
  269. } BlastExtensionParameters;
  270. /** Options used when evaluating and saving hits
  271.  *  These include: 
  272.  *  a. Restrictions on the number of hits to be saved;
  273.  *  b. Restrictions on the quality and positions of hits to be saved;
  274.  *  c. Parameters used to evaluate the quality of hits.
  275.  */
  276. typedef struct BlastHitSavingOptions {
  277.    double expect_value; /**< The expect value cut-off threshold for an HSP, or
  278.                             a combined hit if sum statistics is used */
  279.    Int4 cutoff_score; /**< The (raw) score cut-off threshold */
  280.    double percent_identity; /**< The percent identity cut-off threshold */
  281.    Int4 hitlist_size;/**< Maximal number of database sequences to return
  282.                         results for */
  283.    Int4 prelim_hitlist_size; /**< Maximal number of database sequences to 
  284.                                save hits after preliminary alignment */
  285.    Int4 hsp_num_max; /**< Maximal number of HSPs to save for one database 
  286.                         sequence */
  287.    Int4 total_hsp_limit; /**< Maximal total number of HSPs to keep */
  288.    Int4 hsp_range_max; /**< Maximal number of HSPs to save in a region: 
  289.                           used for culling only */
  290.    Boolean perform_culling;/**< Perform culling of hit lists by keeping at 
  291.                               most a certain number of HSPs in a range
  292.                               (not implemented) */
  293.    /* PSI-BLAST Hit saving options */
  294.    Int4 required_start;  /**< Start of the region required to be part of the
  295.                             alignment */
  296.    Int4 required_end;    /**< End of the region required to be part of the
  297.                             alignment */
  298.    double original_expect_value; /**< Needed for PSI-BLAST??? */
  299.    /********************************************************************/
  300.    /* Merge all these in a structure for clarity? */
  301.    /* applicable to all, except blastn */
  302.    Boolean do_sum_stats; /**< Force sum statistics to be used to combine 
  303.                             HSPs */
  304.    /* tblastn w/ sum statistics */
  305.    Int4 longest_intron; /**< The longest distance between HSPs allowed for
  306.                            combining via sum statistics with uneven gaps */
  307.    /********************************************************************/
  308.    Int4 min_hit_length;    /**< optional minimum alignment length; alignments
  309.                                 not at least this long are discarded */
  310.    Boolean is_neighboring; /**< @todo FIXME: neighboring is specified by a percent 
  311.                              identity and a minimum hit length */
  312.    Boolean phi_align;   /**< Is this a PHI BLAST search? */
  313. } BlastHitSavingOptions;
  314. /** Parameter block that contains a pointer to BlastHitSavingOptions
  315.  * and parsed values for those options that require it
  316.  * (in this case expect value).
  317.  */
  318. typedef struct BlastHitSavingParameters {
  319.    BlastHitSavingOptions* options; /**< The original (unparsed) options. */
  320.    Int4 cutoff_score; /**< Raw cutoff score corresponding to the e-value 
  321.                          provided by the user */
  322.    Boolean do_sum_stats; /**< Is sum statistics used to combine HSPs? */
  323.    double gap_prob;       /**< Probability of decay for linking HSPs */
  324.    double gap_decay_rate; /**< Decay rate for linking HSPs */
  325.    Int4 gap_size;          /**< Small gap size for linking HSPs */
  326.    Int4 cutoff_small_gap; /**< Cutoff sum score for linked HSPs with small 
  327.                              gaps */
  328.    Int4 cutoff_big_gap; /**< Cutoff sum score for linked HSPs with big gaps */
  329.    Boolean ignore_small_gaps; /**< Should small gaps be ignored? */
  330. } BlastHitSavingParameters;
  331. /** Scoring options block 
  332.  *  Used to produce the BlastScoreBlk structure
  333.  *  This structure may be needed for lookup table construction (proteins only),
  334.  *  and for evaluating alignments. 
  335.  */
  336. typedef struct BlastScoringOptions {
  337.    char* matrix;   /**< Name of the matrix containing all scores: needed for
  338.                         finding neighboring words */
  339.    char* matrix_path; /**< Directory path to where matrices are stored. */
  340.    Int2 reward;      /**< Reward for a match */
  341.    Int2 penalty;     /**< Penalty for a mismatch */
  342.    Boolean gapped_calculation; /**< identical to the one in hit saving opts */
  343.    Int4 gap_open;    /**< Extra penalty for starting a gap */
  344.    Int4 gap_extend;  /**< Penalty for each gap residue */
  345.    Int4 decline_align; /**< Cost for declining alignment (PSI-BLAST) */
  346.    /* only blastx and tblastn (When query & subj are diff) */
  347.    Boolean is_ooframe; /**< Should out-of-frame gapping be used in a translated
  348.                           search? */
  349.    Int4 shift_pen;   /**< Penalty for shifting a frame in out-of-frame 
  350.                         gapping */
  351. } BlastScoringOptions;
  352. /** Scoring parameters block
  353.  *  Contains scoring-related information that is actually used
  354.  *  for the blast search
  355.  */
  356. typedef struct BlastScoringParameters {
  357.    BlastScoringOptions *options; /**< User-provided values for these params */
  358.    Int2 reward;      /**< Reward for a match */
  359.    Int2 penalty;     /**< Penalty for a mismatch */
  360.    Int4 gap_open;    /**< Extra penalty for starting a gap (scaled version) */
  361.    Int4 gap_extend;  /**< Penalty for each gap residue  (scaled version) */
  362.    Int4 decline_align; /**< Cost for declining alignment  (scaled version) */
  363.    Int4 shift_pen;   /**< Penalty for shifting a frame in out-of-frame 
  364.                         gapping (scaled version) */
  365.    double scale_factor; /**< multiplier for all cutoff scores */
  366. } BlastScoringParameters;
  367. /** Options for setting up effective lengths and search spaces.  
  368.  * The values are those the user has specified to override the real sizes.
  369.  */
  370. typedef struct BlastEffectiveLengthsOptions {
  371.    Int8 db_length;    /**< Database length to be used for statistical
  372.                          calculations */
  373.    Int4 dbseq_num;    /**< Number of database sequences to be used for
  374.                            statistical calculations */
  375.    Int8 searchsp_eff; /**< Search space to be used for statistical
  376.                            calculations */
  377.    Boolean use_real_db_size; /**< Use real database size instead of virtual
  378.                                 database size for statistical calculations */
  379. } BlastEffectiveLengthsOptions;
  380. /** Parameters for setting up effective lengths and search spaces.  
  381.  * The real database size values to be used for statistical calculations, if
  382.  * there are no overriding values in options.
  383.  */
  384. typedef struct BlastEffectiveLengthsParameters {
  385.    BlastEffectiveLengthsOptions* options; /**< User provided values for these 
  386.                                              parameters */
  387.    Int8 real_db_length; /**< Total database length to use in search space
  388.                            calculations. */
  389.    Int4 real_num_seqs;  /**< Number of subject sequences to use for search
  390.                            space calculations */
  391. } BlastEffectiveLengthsParameters;
  392. /** Options used in protein BLAST only (PSI, PHI, RPS and translated BLAST)
  393.  *  Some of these possibly should be transfered elsewhere  
  394.  */
  395. typedef struct PSIBlastOptions {
  396.     /** Minimum evalue for inclusion in PSSM calculation. Needed for the first
  397.      * stage of the PSSM calculation algorithm */
  398.     double inclusion_ethresh;
  399.     /** Pseudocount constant. Needed for the computing the PSSM residue 
  400.      * frequencies */
  401.     Int4 pseudo_count;
  402. } PSIBlastOptions;
  403. /** Options used to create the ReadDBFILE structure 
  404.  *  Include database name and various information for restricting the database
  405.  *  to a subset.
  406.  */
  407. typedef struct BlastDatabaseOptions {
  408.    Int4 genetic_code;  /**< Genetic code to use for translation, 
  409.                              tblast[nx] only */
  410.    Uint1* gen_code_string;  /**< Genetic code string in ncbistdaa encoding,
  411.                                  tblast[nx] only */
  412. } BlastDatabaseOptions;
  413. /********************************************************************************
  414. Functions to create options blocks with default values
  415. and free them after use.
  416. *********************************************************************************/
  417. /** Deallocate memory for QuerySetUpOptions. 
  418.  * @param options Structure to free [in]
  419.  */
  420. QuerySetUpOptions* BlastQuerySetUpOptionsFree(QuerySetUpOptions* options);
  421. /** Allocate memory for QuerySetUpOptions and fill with default values.  
  422.  * @param options The options that have are being returned [out]
  423.  */
  424. Int2 BlastQuerySetUpOptionsNew(QuerySetUpOptions* *options);
  425. /** Fill non-default contents of the QuerySetUpOptions.
  426.  * @param options The options structure [in] [out]  
  427.  * @param program Program number (blastn, blastp, etc.) [in]
  428.  * @param filter_string Parsable string of filtering options [in] 
  429.  * @param strand_option which strand to search [in]
  430. */
  431. Int2 BLAST_FillQuerySetUpOptions(QuerySetUpOptions* options,
  432.         Uint1 program, const char *filter_string, Uint1 strand_option);
  433. /** Deallocate memory for BlastInitialWordOptions.
  434.  * @param options Structure to free [in]
  435.  */
  436. BlastInitialWordOptions*
  437. BlastInitialWordOptionsFree(BlastInitialWordOptions* options);
  438. /** Allocate memory for BlastInitialWordOptions and fill with default values.
  439.  * @param program Program number (blastn, blastp, etc.) [in]
  440.  * @param options The options that have are being returned [out] 
  441. */
  442. Int2
  443. BlastInitialWordOptionsNew(Uint1 program, 
  444.    BlastInitialWordOptions* *options);
  445. /** Fill non-default values in the BlastInitialWordOptions structure.
  446.  * @param options The options structure [in] [out] 
  447.  * @param program Program number (blastn, blastp, etc.) [in]
  448.  * @param greedy Settings should assume greedy alignments [in]
  449.  * @param window_size Size of a largest window between 2 words for the two-hit
  450.  *                    version [in]
  451.  * @param variable_wordsize Will only full bytes of the compressed sequence be
  452.  *        checked in initial word extension (blastn only)? [in]
  453.  * @param ag_blast Is AG BLAST approach used for scanning the database 
  454.  *                 (blastn only)? [in]
  455.  * @param mb_lookup Is Mega BLAST (12-mer based) lookup table used? [in]
  456.  * @param xdrop_ungapped The value of the X-dropoff for ungapped extensions [in]
  457. */
  458. Int2
  459. BLAST_FillInitialWordOptions(BlastInitialWordOptions* options, 
  460.    Uint1 program, Boolean greedy, Int4 window_size, 
  461.    Boolean variable_wordsize, Boolean ag_blast, Boolean mb_lookup,
  462.    double xdrop_ungapped);
  463. /** Deallocate memory for BlastInitialWordParameters.
  464.  * @param parameters Structure to free [in]
  465.  */
  466. BlastInitialWordParameters*
  467. BlastInitialWordParametersFree(BlastInitialWordParameters* parameters);
  468. /** Allocate memory for BlastInitialWordParameters and set x_dropoff.
  469.  * Calling BlastInitialWordParametersNew calculates the
  470.  * raw x_dropoff from the bit x_dropoff and puts it into
  471.  * the x_dropoff field of BlastInitialWordParameters*.
  472.  *
  473.  * @param program_number Type of BLAST program [in]
  474.  * @param word_options The initial word options [in]
  475.  * @param hit_params The hit saving options (needed to calculate cutoff score 
  476.  *                    for ungapped extensions) [in]
  477.  * @param ext_params Extension parameters (containing gap trigger value) [in]
  478.  * @param sbp Statistical (Karlin-Altschul) information [in]
  479.  * @param query_info Query information [in]
  480.  * @param subject_length Average subject sequence length [in]
  481.  * @param parameters Resulting parameters [out]
  482. */
  483. Int2
  484. BlastInitialWordParametersNew(Uint1 program_number, 
  485.    const BlastInitialWordOptions* word_options, 
  486.    const BlastHitSavingParameters* hit_params, 
  487.    const BlastExtensionParameters* ext_params, BlastScoreBlk* sbp, 
  488.    BlastQueryInfo* query_info, 
  489.    Uint4 subject_length,
  490.    BlastInitialWordParameters* *parameters);
  491. /** Update cutoff scores in BlastInitialWordParameters structure.
  492.  * @param program_number Type of BLAST program [in]
  493.  * @param hit_params The hit saving options (needed to calculate cutoff score 
  494.  *                    for ungapped extensions) [in]
  495.  * @param ext_params Extension parameters (containing gap trigger value) [in]
  496.  * @param sbp Statistical (Karlin-Altschul) information [in]
  497.  * @param query_info Query information [in]
  498.  * @param subject_length Average subject sequence length [in]
  499.  * @param parameters Preallocated parameters [in] [out]
  500. */
  501. Int2
  502. BlastInitialWordParametersUpdate(Uint1 program_number, 
  503.    const BlastHitSavingParameters* hit_params, 
  504.    const BlastExtensionParameters* ext_params, BlastScoreBlk* sbp, 
  505.    BlastQueryInfo* query_info, Uint4 subject_length,
  506.    BlastInitialWordParameters* parameters);
  507. /** Deallocate memory for BlastExtensionOptions.
  508.  * @param options Structure to free [in]
  509.  */
  510. BlastExtensionOptions*
  511. BlastExtensionOptionsFree(BlastExtensionOptions* options);
  512. /** Allocate memory for BlastExtensionOptions and fill with default values.
  513.  * @param program Program number (blastn, blastp, etc.) [in]
  514.  * @param options The options that are being returned [out]
  515. */
  516. Int2
  517. BlastExtensionOptionsNew(Uint1 program, BlastExtensionOptions* *options);
  518. /** Fill non-default values in the BlastExtensionOptions structure.
  519.  * @param options The options structure [in] [out]
  520.  * @param program Program number (blastn, blastp, etc.) [in]
  521.  * @param greedy Settings should assume greedy alignments [in]
  522.  * @param x_dropoff X-dropoff parameter value for preliminary gapped 
  523.  *                  extensions [in]
  524.  * @param x_dropoff_final X-dropoff parameter value for final gapped 
  525.  *                        extensions with traceback [in]
  526. */
  527. Int2
  528. BLAST_FillExtensionOptions(BlastExtensionOptions* options, 
  529.    Uint1 program, Boolean greedy, double x_dropoff, 
  530.    double x_dropoff_final);
  531. /** Validate contents of BlastExtensionOptions.
  532.  * @param program_number Type of BLAST program [in]
  533.  * @param options Options to be validated [in]
  534.  * @param blast_msg Describes any validation problems found [out]
  535. */
  536. Int2 BlastExtensionOptionsValidate(Uint1 program_number, 
  537.         const BlastExtensionOptions* options, Blast_Message* *blast_msg);
  538. /** Calculate the raw values for the X-dropoff parameters 
  539.  * @param blast_program Program number [in]
  540.  * @param options Already allocated extension options [in]
  541.  * @param sbp Structure containing statistical information [in]
  542.  * @param query_info Query information, needed only for determining the first 
  543.  *                   context [in]
  544.  * @param parameters Extension parameters [out]
  545.  */
  546. Int2 BlastExtensionParametersNew(Uint1 blast_program, 
  547.         const BlastExtensionOptions* options, 
  548.         BlastScoreBlk* sbp, BlastQueryInfo* query_info, 
  549.         BlastExtensionParameters* *parameters);
  550. /** Deallocate memory for BlastExtensionParameters. 
  551.  * @param parameters Structure to free [in]
  552.  */
  553. BlastExtensionParameters*
  554. BlastExtensionParametersFree(BlastExtensionParameters* parameters);
  555. /**  Deallocate memory for BlastScoringOptions. 
  556.  * @param options Structure to free [in]
  557.  */
  558. BlastScoringOptions* BlastScoringOptionsFree(BlastScoringOptions* options);
  559. /** Allocate memory for BlastScoringOptions and fill with default values. 
  560.  * @param program Program number (blastn, blastp, etc.) [in]
  561.  * @param options The options that are being returned [out]
  562. */
  563. Int2 BlastScoringOptionsNew(Uint1 program, BlastScoringOptions* *options);
  564. /** Fill non-default values in the BlastScoringOptions structure. 
  565.  * @param options The options structure [in] [out]
  566.  * @param program Program number (blastn, blastp, etc.) [in]
  567.  * @param greedy_extension Is greedy extension algorithm used? [in]
  568.  * @param penalty Mismatch penalty score (blastn only) [in]
  569.  * @param reward Match reward score (blastn only) [in]
  570.  * @param matrix Name of the BLAST matrix (all except blastn) [in]
  571.  * @param gap_open Extra cost for opening a gap [in]
  572.  * @param gap_extend Cost of a gap [in]
  573. */
  574. Int2 
  575. BLAST_FillScoringOptions(BlastScoringOptions* options, Uint1 program, 
  576.    Boolean greedy_extension, Int4 penalty, Int4 reward, const char *matrix, 
  577.    Int4 gap_open, Int4 gap_extend);
  578. /** Validate contents of BlastScoringOptions.
  579.  * @param program_number Type of BLAST program [in]
  580.  * @param options Options to be validated [in]
  581.  * @param blast_msg Describes any validation problems found [out]
  582. */
  583. Int2
  584. BlastScoringOptionsValidate(Uint1 program_number, 
  585.    const BlastScoringOptions* options, Blast_Message* *blast_msg);
  586. /** Produces copy of "old" options, with new memory allocated.
  587.  * @param new_opt Contains copied BlastScoringOptions upon return [out]
  588.  * @param old_opt BlastScoringOptions to be copied [in]
  589. */
  590. Int2 BlastScoringOptionsDup(BlastScoringOptions* *new_opt, const BlastScoringOptions* old_opt);
  591. /**  Deallocate memory for BlastScoringParameters.
  592.  * @param parameters Structure to free [in]
  593.  */
  594. BlastScoringParameters* BlastScoringParametersFree(
  595.                                      BlastScoringParameters* parameters);
  596. /** Calculate scaled cutoff scores and gap penalties
  597.  * @param options Already allocated scoring options [in]
  598.  * @param sbp Structure containing scale factor [in]
  599.  * @param parameters Scoring parameters [out]
  600.  */
  601. Int2 BlastScoringParametersNew(const BlastScoringOptions *options,
  602.                                BlastScoreBlk* sbp, 
  603.                                BlastScoringParameters* *parameters);
  604. /** Deallocate memory for BlastEffectiveLengthsOptions*. 
  605.  * @param options Structure to free [in]
  606.  */
  607. BlastEffectiveLengthsOptions* 
  608. BlastEffectiveLengthsOptionsFree(BlastEffectiveLengthsOptions* options);
  609. /** Allocate memory for BlastEffectiveLengthsOptions* and fill with 
  610.  * default values. 
  611.  * @param options The options that are being returned [out]
  612.  */
  613. Int2 BlastEffectiveLengthsOptionsNew(BlastEffectiveLengthsOptions* *options);
  614. /** Deallocate memory for BlastEffectiveLengthsParameters*. 
  615.  * @param parameters Structure to free [in]
  616.  */
  617. BlastEffectiveLengthsParameters* 
  618. BlastEffectiveLengthsParametersFree(BlastEffectiveLengthsParameters* parameters);
  619. /** Allocate memory for BlastEffectiveLengthsParameters 
  620.  * @param options The user provided options [in]
  621.  * @param db_length The database length [in]
  622.  * @param num_seqs Number of sequences in database [in]
  623.  * @param parameters The parameters structure returned [out]
  624.  */
  625. Int2 
  626. BlastEffectiveLengthsParametersNew(const BlastEffectiveLengthsOptions* options, 
  627.                                Int8 db_length, Int4 num_seqs,
  628.                                BlastEffectiveLengthsParameters* *parameters);
  629. /** Fill the non-default values in the BlastEffectiveLengthsOptions structure.
  630.  * @param options The options [in] [out]
  631.  * @param dbseq_num Number of sequences in the database (if zero real value will be used) [in]
  632.  * @param db_length Total length of the database (if zero real value will be used) [in]
  633.  * @param searchsp_eff Effective search space (if zero real value will be used) [in]
  634.  */
  635. Int2 
  636. BLAST_FillEffectiveLengthsOptions(BlastEffectiveLengthsOptions* options, 
  637.    Int4 dbseq_num, Int8 db_length, Int8 searchsp_eff);
  638. /** Allocate memory for lookup table options and fill with default values.
  639.  * @param program Program number (blastn, blastp, etc.) [in]
  640.  * @param options The options that are being returned [out]
  641.  */
  642. Int2 LookupTableOptionsNew(Uint1 program, LookupTableOptions* *options);
  643. /** Auxiliary function that calculates best database scanning stride for the
  644.  * given parameters.
  645.  * @param word_size Length of the exact match required to trigger 
  646.  *                  extensions [in]
  647.  * @param var_words If true, and word_size is divisible by 4, partial bytes 
  648.  *                  need not be checked to test the length of the 
  649.  *                  exact match [in]
  650.  * @param lut_type  What kind of lookup table is used (based on 4-mers, 8-mers 
  651.  *                  or 12-mers) [in]
  652.  * @return          The stride necessary to find all exact matches of a given
  653.  *                  word size.
  654.  */
  655. Int4 CalculateBestStride(Int4 word_size, Boolean var_words, Int4 lut_type);
  656. /** Allocate memory for lookup table options and fill with default values.
  657.  * @param options The options [in] [out]
  658.  * @param program Program number (blastn, blastp, etc.) [in]
  659.  * @param is_megablast Megablast (instead of blastn) if TRUE [in]
  660.  * @param threshold Threshold value for finding neighboring words [in]
  661.  * @param word_size Number of matched residues in an initial word [in]
  662.  * @param ag_blast Is AG BLAST approach to database scanning used? [in]
  663.  * @param variable_wordsize Are only full bytes of a compressed sequence 
  664.  *        checked to find initial words? [in]
  665.  * @param use_pssm Use PSSM rather than (protein) query to build lookup table.
  666.  */
  667. Int2 
  668. BLAST_FillLookupTableOptions(LookupTableOptions* options, 
  669.    Uint1 program, Boolean is_megablast, Int4 threshold,
  670.    Int2 word_size, Boolean ag_blast, Boolean variable_wordsize,
  671.    Boolean use_pssm);
  672. /** Deallocates memory for LookupTableOptions*.
  673.  * @param options Structure to free [in]
  674.  */
  675. LookupTableOptions*
  676. LookupTableOptionsFree(LookupTableOptions* options);
  677. /** Validate LookupTableOptions.
  678.  * @param program_number BLAST program [in]
  679.  * @param options The options that have are being returned [in]
  680.  * @param blast_msg The options that have are being returned [out]
  681. */
  682. Int2
  683. LookupTableOptionsValidate(Uint1 program_number, 
  684.    const LookupTableOptions* options,  Blast_Message* *blast_msg);
  685. /** Deallocate memory for BlastHitSavingOptions. 
  686.  * @param options Structure to free [in]
  687.  */
  688. BlastHitSavingOptions*
  689. BlastHitSavingOptionsFree(BlastHitSavingOptions* options);
  690. /** Validate BlastHitSavingOptions
  691.  * @param program_number BLAST program [in]
  692.  * @param options The options that have are being returned [in]
  693.  * @param blast_msg The options that have are being returned [out]
  694. */
  695. Int2
  696. BlastHitSavingOptionsValidate(Uint1 program_number,
  697.    const BlastHitSavingOptions* options, Blast_Message* *blast_msg);
  698. /** Allocate memory for BlastHitSavingOptions.
  699.  * @param program Program number (blastn, blastp, etc.) [in]
  700.  * @param options The options that are being returned [out]
  701. */
  702. Int2 BlastHitSavingOptionsNew(Uint1 program, 
  703.         BlastHitSavingOptions* *options);
  704. /** Allocate memory for BlastHitSavingOptions.
  705.  * @param options The options [in] [out]
  706.  * @param evalue The expected value threshold [in]
  707.  * @param hitlist_size How many database sequences to save per query? [in]
  708. */
  709. Int2
  710. BLAST_FillHitSavingOptions(BlastHitSavingOptions* options, 
  711.                            double evalue, Int4 hitlist_size);
  712. /** Deallocate memory for BlastHitSavingOptions*. 
  713.  * @param parameters Structure to free [in]
  714.  */
  715. BlastHitSavingParameters*
  716. BlastHitSavingParametersFree(BlastHitSavingParameters* parameters);
  717. /** Allocate memory and initialize the BlastHitSavingParameters structure. 
  718.  * Calculates the (raw) score cutoff given an expect value and puts
  719.  * it in the "cutoff_score" field of the returned BlastHitSavingParameters*
  720.  *
  721.  * @param program_number Number of the BLAST program [in]
  722.  * @param options The given hit saving options [in]
  723.  * @param ext_params Extension parameters containing the gap trigger value [in]
  724.  * @param sbp Scoring block, needed for calculating score cutoff from 
  725.  *            e-value [in]
  726.  * @param query_info Query information, needed for calculating score cutoff 
  727.  *                   from e-value [in]
  728.  * @param parameters Resulting parameters [out]
  729.  */
  730. Int2 BlastHitSavingParametersNew(Uint1 program_number, 
  731.         const BlastHitSavingOptions* options, 
  732.         const BlastExtensionParameters* ext_params,
  733.         BlastScoreBlk* sbp, BlastQueryInfo* query_info, 
  734.         BlastHitSavingParameters* *parameters);
  735. /** Updates cutoff scores in hit saving parameters. 
  736.  * @param program_number Number of the BLAST program [in]
  737.  * @param ext_params Extension parameters containing the gap trigger 
  738.  *                   value [in]
  739.  * @param sbp Scoring block, needed for calculating score cutoff from 
  740.  *            e-value [in]
  741.  * @param query_info Query information, needed for calculating score cutoff 
  742.  *                   from e-value [in]
  743.  * @param parameters Preallocated parameters [in] [out]
  744.  */
  745. Int2 BlastHitSavingParametersUpdate(Uint1 program_number, 
  746.         const BlastExtensionParameters* ext_params,
  747.         BlastScoreBlk* sbp, BlastQueryInfo* query_info, 
  748.         BlastHitSavingParameters* parameters);
  749. /** Initialize default options for PSI BLAST */
  750. Int2 PSIBlastOptionsNew(PSIBlastOptions** psi_options);
  751. /** Deallocate PSI BLAST options */
  752. PSIBlastOptions* PSIBlastOptionsFree(PSIBlastOptions* psi_options);
  753. /** Allocates the BlastDatabase options structure and sets the default
  754.  * database genetic code value (BLAST_GENETIC_CODE). Genetic code string in
  755.  * ncbistdaa must be populated by client code */
  756. Int2 BlastDatabaseOptionsNew(BlastDatabaseOptions** db_options);
  757. /** Deallocate database options */
  758. BlastDatabaseOptions* 
  759. BlastDatabaseOptionsFree(BlastDatabaseOptions* db_options);
  760. /** Initialize all the BLAST search options structures with the default
  761.  * values.
  762.  * @param blast_program Type of blast program: blastn, blastp, blastx, 
  763.  *                      tblastn, tblastx) [in]
  764.  * @param lookup_options Lookup table options [out]
  765.  * @param query_setup_options Query options [out]
  766.  * @param word_options Initial word processing options [out]
  767.  * @param ext_options Extension options [out]
  768.  * @param hit_options Hit saving options [out]
  769.  * @param score_options Scoring options [out]
  770.  * @param eff_len_options Effective length options [out]
  771.  * @param protein_options Protein BLAST options [out]
  772.  * @param db_options BLAST database options [out]
  773.  */
  774. Int2 BLAST_InitDefaultOptions(Uint1 blast_program,
  775.    LookupTableOptions** lookup_options,
  776.    QuerySetUpOptions** query_setup_options, 
  777.    BlastInitialWordOptions** word_options,
  778.    BlastExtensionOptions** ext_options,
  779.    BlastHitSavingOptions** hit_options,
  780.    BlastScoringOptions** score_options,
  781.    BlastEffectiveLengthsOptions** eff_len_options,
  782.    PSIBlastOptions** protein_options,
  783.    BlastDatabaseOptions** db_options);
  784. /** Validate all options */
  785. Int2 BLAST_ValidateOptions(Uint1 program_number,
  786.                            const BlastExtensionOptions* ext_options,
  787.                            const BlastScoringOptions* score_options, 
  788.                            const LookupTableOptions* lookup_options, 
  789.                            const BlastHitSavingOptions* hit_options,
  790.                            Blast_Message* *blast_msg);
  791. /** Calculates cutoff scores and returns them.
  792.  * Equations provided by Stephen Altschul.
  793.  * @param program BLAST program type [in]
  794.  * @param query_info Query(ies) information [in]
  795.  * @param sbp Scoring statistical parameters [in]
  796.  * @param hit_params Hit saving parameters, including all cutoff 
  797.  *                   scores [in] [out]
  798.  * @param ext_params Extension parameters (gap_trigger used) [in]
  799.  * @param db_length Total length of database (non-database search if 0) [in]
  800.  * @param subject_length Length of the subject sequence. [in]
  801.  * 
  802. */
  803. void
  804. CalculateLinkHSPCutoffs(Uint1 program, BlastQueryInfo* query_info, 
  805.    BlastScoreBlk* sbp, BlastHitSavingParameters* hit_params, 
  806.    BlastExtensionParameters* ext_params,
  807.    Int8 db_length, Int4 subject_length);
  808. #ifdef __cplusplus
  809. }
  810. #endif
  811. #endif /* !__BLASTOPTIONS__ */