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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: blast_gapalign.h,v $
  4.  * PRODUCTION Revision 1000.3  2004/06/01 18:03:30  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.48
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: blast_gapalign.h,v 1000.3 2004/06/01 18:03:30 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:  Ilya Dondoshansky
  35.  *
  36.  */
  37. /** @file blast_gapalign.h
  38.  * Structures and functions prototypes used for BLAST gapped extension
  39.  * @todo FIXME: elaborate on contents.
  40.  */
  41. #ifndef __BLAST_GAPALIGN__
  42. #define __BLAST_GAPALIGN__
  43. #include <algo/blast/core/blast_def.h>
  44. #include <algo/blast/core/blast_options.h>
  45. #include <algo/blast/core/blast_extend.h>
  46. #include <algo/blast/core/gapinfo.h>
  47. #include <algo/blast/core/greedy_align.h>
  48. #include <algo/blast/core/blast_hits.h>
  49. #ifdef __cplusplus
  50. extern "C" {
  51. #endif
  52. /** Diagonal distance cutoff when looking for HSP inclusion in Mega BLAST */ 
  53. #define MB_DIAG_NEAR 30 
  54. /** Diagonal distance between HSPs for which one can be considered included in 
  55.    the other in Mega BLAST */
  56. #define MB_DIAG_CLOSE 6 
  57. /** Minimal HSP length allowed for neighboring */
  58. #define MIN_NEIGHBOR_HSP_LENGTH 100 
  59. /** Minimal percent of identities allowed for neighboring */
  60. #define MIN_NEIGHBOR_PERC_IDENTITY 96 
  61. /** Split subject sequences if longer than this */
  62. #define MAX_DBSEQ_LEN 5000000 
  63. /** Structure supporting the gapped alignment */
  64. typedef struct BlastGapAlignStruct {
  65.    Boolean positionBased; /**< Is this PSI-BLAST? */
  66.    Int4 position_offset; /**< Offset into the PSSM for the present sequence */
  67.    GapStateArrayStruct* state_struct; /**< Structure to keep extension 
  68.                                                 state information */
  69.    GapEditBlock* edit_block; /**< The traceback (gap) information */
  70.    SGreedyAlignMem* greedy_align_mem;/**< Preallocated memory for the greedy 
  71.                                          gapped extension */
  72.    BlastScoreBlk* sbp; /**< Pointer to the scoring information block */
  73.    Int4 gap_x_dropoff; /**< X-dropoff parameter to use */
  74.    Int4 query_start, query_stop;/**< Return values: query offsets */
  75.    Int4 subject_start, subject_stop;/**< Return values: subject offsets */
  76.    Int4 score;   /**< Return value: alignment score */
  77.    double percent_identity;/**< Return value: percent identity - filled only 
  78.                                by the greedy non-affine alignment algorithm */
  79. } BlastGapAlignStruct;
  80. /** Initializes the BlastGapAlignStruct structure 
  81.  * @param score_params Parameters related to scoring alignments [in]
  82.  * @param ext_params parameters related to gapped extension [in]
  83.  * @param max_subject_length Maximum length of any subject sequence (needed 
  84.  *        for greedy extension allocation only) [in]
  85.  * @param query_length The length of the query sequence [in]
  86.  * @param sbp The scoring information block [in]
  87.  * @param gap_align_ptr The BlastGapAlignStruct structure [out]
  88. */
  89. Int2
  90. BLAST_GapAlignStructNew(const BlastScoringParameters* score_params, 
  91.    const BlastExtensionParameters* ext_params, 
  92.    Uint4 max_subject_length, Int4 query_length, 
  93.    BlastScoreBlk* sbp, BlastGapAlignStruct** gap_align_ptr);
  94. /** Deallocates memory in the BlastGapAlignStruct structure */
  95. BlastGapAlignStruct* 
  96. BLAST_GapAlignStructFree(BlastGapAlignStruct* gap_align);
  97. /** Mega BLAST function performing gapped alignment: 
  98.  *  Sorts initial HSPs by diagonal; 
  99.  *  For each HSP:
  100.  *    - Removes HSP if it is included in another already extended HSP;
  101.  *    - If required, performs ungapped extension;
  102.  *    - Performs greedy gapped extension;
  103.  *    - Saves qualifying HSPs with gapped information into an HSP list 
  104.  *      structure.
  105.  * @param program_number Not needed: added for prototype consistency.
  106.  * @param query The query sequence [in]
  107.  * @param query_info Query information structure, containing offsets into 
  108.  *                   the concatenated sequence [in]
  109.  * @param subject The subject sequence [in]
  110.  * @param gap_align A placeholder for gapped alignment information and 
  111.  *        score block. [in] [out]
  112.  * @param score_params Options related to scoring alignments [in]
  113.  * @param ext_params Options related to alignment extension [in]
  114.  * @param hit_params Options related to saving HSPs [in]
  115.  * @param init_hitlist Contains all the initial hits [in]
  116.  * @param hsp_list_ptr List of HSPs with full extension information [out]
  117.  * @param gapped_stats Return statistics (not filled if NULL) [out]
  118. */
  119. Int2 BLAST_MbGetGappedScore(Uint1 program_number, 
  120.              BLAST_SequenceBlk* query, BlastQueryInfo* query_info, 
  121.     BLAST_SequenceBlk* subject,
  122.     BlastGapAlignStruct* gap_align,
  123.     const BlastScoringParameters* score_params, 
  124.     const BlastExtensionParameters* ext_params,
  125.     const BlastHitSavingParameters* hit_params,
  126.     BlastInitHitList* init_hitlist,
  127.     BlastHSPList** hsp_list_ptr, BlastGappedStats* gapped_stats);
  128. /** Performs gapped extension for all non-Mega BLAST programs, given
  129.  * that ungapped extension has been done earlier.
  130.  * Sorts initial HSPs by score (from ungapped extension);
  131.  * Deletes HSPs that are included in already extended HSPs;
  132.  * Performs gapped extension;
  133.  * Saves HSPs into an HSP list.
  134.  * @param program_number Type of BLAST program [in]
  135.  * @param query The query sequence block [in]
  136.  * @param query_info Query information structure, containing offsets into 
  137.  *                   the concatenated sequence [in]
  138.  * @param subject The subject sequence block [in]
  139.  * @param gap_align The auxiliary structure for gapped alignment [in]
  140.  * @param score_params Options related to scoring [in]
  141.  * @param ext_params Options and parameters related to extensions [in]
  142.  * @param hit_params Options related to saving hits [in]
  143.  * @param init_hitlist List of initial HSPs (offset pairs with additional 
  144.  *        information from the ungapped alignment performed earlier) [in]
  145.  * @param hsp_list_ptr Structure containing all saved HSPs [out]
  146.  * @param gapped_stats Return statistics (not filled if NULL) [out]
  147.  */
  148. Int2 BLAST_GetGappedScore (Uint1 program_number, 
  149.             BLAST_SequenceBlk* query, BlastQueryInfo* query_info, 
  150.       BLAST_SequenceBlk* subject,
  151.       BlastGapAlignStruct* gap_align,
  152.       const BlastScoringParameters* score_parameters, 
  153.       const BlastExtensionParameters* ext_params,
  154.       const BlastHitSavingParameters* hit_params,
  155.       BlastInitHitList* init_hitlist,
  156.       BlastHSPList** hsp_list_ptr, BlastGappedStats* gapped_stats);
  157. /** Perform a gapped alignment with traceback
  158.  * @param program Type of BLAST program [in]
  159.  * @param query The query sequence [in]
  160.  * @param subject The subject sequence [in]
  161.  * @param gap_align The gapped alignment structure [in] [out]
  162.  * @param score_params Scoring parameters [in]
  163.  * @param q_start Offset in query where to start alignment [in]
  164.  * @param s_start Offset in subject where to start alignment [in]
  165.  * @param query_length Maximal allowed extension in query [in]
  166.  * @param subject_length Maximal allowed extension in subject [in]
  167.  */
  168. Int2 BLAST_GappedAlignmentWithTraceback(Uint1 program, 
  169.         Uint1* query, Uint1* subject, 
  170.         BlastGapAlignStruct* gap_align, 
  171.         const BlastScoringParameters* score_params,
  172.         Int4 q_start, Int4 s_start, Int4 query_length, Int4 subject_length);
  173. /** Greedy gapped alignment, with or without traceback.
  174.  * Given two sequences, relevant options and an offset pair, fills the
  175.  * gap_align structure with alignment endpoints and, if traceback is 
  176.  * performed, gap information.
  177.  * @param query The query sequence [in]
  178.  * @param subject The subject sequence [in]
  179.  * @param query_length The query sequence length [in]
  180.  * @param subject_length The subject sequence length [in]
  181.  * @param gap_align The structure holding various information and memory 
  182.  *        needed for gapped alignment [in] [out]
  183.  * @param score_params Parameters related to scoring alignments [in]
  184.  * @param q_off Starting offset in query [in]
  185.  * @param s_off Starting offset in subject [in]
  186.  * @param compressed_subject Is subject sequence compressed? [in]
  187.  * @param do_traceback Should traceback be saved? [in]
  188.  */
  189. Int2 
  190. BLAST_GreedyGappedAlignment(Uint1* query, Uint1* subject, 
  191.    Int4 query_length, Int4 subject_length, BlastGapAlignStruct* gap_align,
  192.    const BlastScoringParameters* score_params, 
  193.    Int4 q_off, Int4 s_off, Boolean compressed_subject, Boolean do_traceback);
  194. /** Perform a gapped alignment with traceback for PHI BLAST
  195.  * @param program Type of BLAST program [in]
  196.  * @param query The query sequence [in]
  197.  * @param subject The subject sequence [in]
  198.  * @param gap_align The gapped alignment structure [in] [out]
  199.  * @param score_params Scoring parameters [in]
  200.  * @param q_start Offset in query where to start alignment [in]
  201.  * @param s_start Offset in subject where to start alignment [in]
  202.  * @param query_length Maximal allowed extension in query [in]
  203.  * @param subject_length Maximal allowed extension in subject [in]
  204.  */
  205. Int2 PHIGappedAlignmentWithTraceback(Uint1 program, 
  206.         Uint1* query, Uint1* subject, 
  207.         BlastGapAlignStruct* gap_align, 
  208.         const BlastScoringParameters* score_params,
  209.         Int4 q_start, Int4 s_start, Int4 query_length, Int4 subject_length);
  210. /** Convert initial HSP list to an HSP list: to be used in ungapped search.
  211.  * Ungapped data must be available in the initial HSP list for this function 
  212.  * to work.
  213.  * @param init_hitlist List of initial HSPs with ungapped extension 
  214.  *                     information [in]
  215.  * @param query_info Query information structure, containing offsets into
  216.  *                   the concatenated queries/strands/frames [in]
  217.  * @param subject Subject sequence block containing frame information [in]
  218.  * @param hit_options Hit saving options [in]
  219.  * @param hsp_list_ptr HSPs in the final form [out]
  220.  */
  221. Int2 BLAST_GetUngappedHSPList(BlastInitHitList* init_hitlist, 
  222.         BlastQueryInfo* query_info, BLAST_SequenceBlk* subject, 
  223.         const BlastHitSavingOptions* hit_options, 
  224.         BlastHSPList** hsp_list_ptr);
  225. /** Preliminary gapped alignment for PHI BLAST.
  226.  * @param program_number Type of BLAST program [in]
  227.  * @param query The query sequence block [in]
  228.  * @param query_info Query information structure, containing offsets into 
  229.  *                   the concatenated sequence [in]
  230.  * @param subject The subject sequence block [in]
  231.  * @param gap_align The auxiliary structure for gapped alignment [in]
  232.  * @param score_params Options related to scoring [in]
  233.  * @param ext_params Options and parameters related to extensions [in]
  234.  * @param hit_params Options related to saving hits [in]
  235.  * @param init_hitlist List of initial HSPs, including offset pairs and
  236.  *                     pattern match lengths [in]
  237.  * @param hsp_list_ptr Structure containing all saved HSPs [out]
  238.  * @param gapped_stats Return statistics (not filled if NULL) [out]
  239.  */
  240. Int2 PHIGetGappedScore (Uint1 program_number, 
  241.         BLAST_SequenceBlk* query, BlastQueryInfo* query_info, 
  242.         BLAST_SequenceBlk* subject, 
  243.         BlastGapAlignStruct* gap_align,
  244.         const BlastScoringParameters* score_params,
  245.         const BlastExtensionParameters* ext_params,
  246.         const BlastHitSavingParameters* hit_params,
  247.         BlastInitHitList* init_hitlist,
  248.         BlastHSPList** hsp_list_ptr, BlastGappedStats* gapped_stats);
  249. void 
  250. AdjustSubjectRange(Int4* subject_offset_ptr, Int4* subject_length_ptr, 
  251.                    Int4 query_offset, Int4 query_length, Int4* start_shift);
  252. /** Function to look for the highest scoring window (of size HSP_MAX_WINDOW)
  253.  * in an HSP and return the middle of this.  Used by the gapped-alignment
  254.  * functions to start the gapped alignments.
  255.  * @param query The query sequence [in]
  256.  * @param subject The subject sequence [in]
  257.  * @param sbp Scoring block, containing matrix [in]
  258.  * @param q_start Starting offset in query [in]
  259.  * @param q_length Length of HSP in query [in]
  260.  * @param s_start Starting offset in subject [in]
  261.  * @param s_length Length of HSP in subject [in]
  262.  * @return The offset at which alignment should be started [out]
  263. */
  264. Int4 
  265. BlastGetStartForGappedAlignment (Uint1* query, Uint1* subject,
  266.    const BlastScoreBlk* sbp, Uint4 q_start, Uint4 q_length, 
  267.    Uint4 s_start, Uint4 s_length);
  268. #ifdef __cplusplus
  269. }
  270. #endif
  271. #endif /* !__BLAST_GAPALIGN__ */