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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: aa_ungapped.h,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 18:03:16  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.18
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: aa_ungapped.h,v 1000.2 2004/06/01 18:03:16 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. /** @file aa_ungapped.h
  35.  * @todo FIXME: Need file description (protein wordfinding & ungapped 
  36.  * extension code?)
  37.  */
  38. #ifndef AA_UNGAPPED__H
  39. #define AA_UNGAPPED__H
  40. #include <algo/blast/core/blast_def.h>
  41. #include <algo/blast/core/blast_lookup.h>
  42. #include <algo/blast/core/blast_extend.h>
  43. #ifdef _cplusplus
  44. extern "C" {
  45. #endif
  46. /** Scan a subject sequence for word hits
  47.  *
  48.  * @param subject the subject sequence [in]
  49.  * @param query the query sequence [in]
  50.  * @param lookup the lookup table [in]
  51.  * @param matrix the substitution matrix [in]
  52.  * @param word_params word parameters, needed for cutoff and dropoff [in]
  53.  * @param ewp extend parameters, needed for diagonal tracking [in]
  54.  * @param query_offsets array for storing query offsets [out]
  55.  * @param subject_offsets array for storing subject offsets [out]
  56.  * @param offset_array_size the number of elements in each offset array [in]
  57.  * @param init_hitlist hsps resulting from the ungapped extension [out]
  58.  * @param ungapped_stats Various hit counts. Not filled if NULL [out]
  59.  */
  60. Int2 BlastAaWordFinder(BLAST_SequenceBlk* subject,
  61.        BLAST_SequenceBlk* query,
  62.        LookupTableWrap* lookup,
  63.        Int4** matrix,
  64.        const BlastInitialWordParameters* word_params,
  65.        Blast_ExtendWord* ewp,
  66.        Uint4* NCBI_RESTRICT query_offsets,
  67.        Uint4* NCBI_RESTRICT subject_offsets,
  68.        Int4 offset_array_size,
  69.        BlastInitHitList* init_hitlist, 
  70.              BlastUngappedStats* ungapped_stats);
  71. /** Scan a subject sequence for word hits and trigger two-hit extensions.
  72.  *
  73.  * @param subject the subject sequence [in]
  74.  * @param query the query sequence [in]
  75.  * @param lookup_wrap the lookup table [in]
  76.  * @param diag the diagonal array structure [in/out]
  77.  * @param matrix the substitution matrix [in]
  78.  * @param cutoff cutoff score for saving ungapped HSPs [in]
  79.  * @param dropoff x dropoff [in]
  80.  * @param query_offsets array for storing query offsets [out]
  81.  * @param subject_offsets array for storing subject offsets [out]
  82.  * @param array_size the number of elements in each offset array [in]
  83.  * @param ungapped_hsps hsps resulting from the ungapped extension [out]
  84.  * @param ungapped_stats Various hit counts. Not filled if NULL [out]
  85.  */
  86. Int2 BlastAaWordFinder_TwoHit(const BLAST_SequenceBlk* subject,
  87.       const BLAST_SequenceBlk* query,
  88.       const LookupTableWrap* lookup_wrap,
  89.       BLAST_DiagTable* diag,
  90.       Int4 ** matrix,
  91.       Int4 cutoff,
  92.       Int4 dropoff,
  93.       Uint4 * NCBI_RESTRICT query_offsets,
  94.       Uint4 * NCBI_RESTRICT subject_offsets,
  95.       Int4 array_size,
  96.             BlastInitHitList* ungapped_hsps, 
  97.                BlastUngappedStats* ungapped_stats);
  98. /** Scan a subject sequence for word hits and trigger one-hit extensions.
  99.  *
  100.  * @param subject the subject sequence
  101.  * @param query the query sequence
  102.  * @param lookup_wrap the lookup table
  103.  * @param diag the diagonal array structure
  104.  * @param matrix the substitution matrix [in]
  105.  * @param cutoff cutoff score for saving ungapped HSPs [in]
  106.  * @param dropoff x dropoff [in]
  107.  * @param query_offsets array for storing query offsets
  108.  * @param subject_offsets array for storing subject offsets
  109.  * @param array_size the number of elements in each offset array
  110.  * @param ungapped_hsps hsps resulting from the ungapped extensions [out]
  111.  * @param ungapped_stats Various hit counts. Not filled if NULL [out]
  112.  */
  113. Int2 BlastAaWordFinder_OneHit(const BLAST_SequenceBlk* subject,
  114.       const BLAST_SequenceBlk* query,
  115.       const LookupTableWrap* lookup_wrap,
  116.       BLAST_DiagTable* diag,
  117.       Int4 ** matrix,
  118.       Int4 cutoff,
  119.       Int4 dropoff,
  120.       Uint4 * NCBI_RESTRICT query_offsets,
  121.       Uint4 * NCBI_RESTRICT subject_offsets,
  122.       Int4 array_size,
  123.             BlastInitHitList* ungapped_hsps, 
  124.                BlastUngappedStats* ungapped_stats);
  125. /**
  126.  * Beginning at s_off and q_off in the subject and query, respectively,
  127.  * extend to the right until the cumulative score becomes negative or
  128.  * drops by at least dropoff.
  129.  *
  130.  * @param matrix the substitution matrix [in]
  131.  * @param subject subject sequence [in]
  132.  * @param query query sequence [in]
  133.  * @param s_off subject offset [in]
  134.  * @param q_off query offset [in]
  135.  * @param dropoff the X dropoff parameter [in]
  136.  * @param displacement the length of the extension [out]
  137.  * @param maxscore the score derived from a previous left extension [in]
  138.  * @param s_last_off the rightmost subject offset examined [out]
  139.  * @return The score of the extension
  140.  */
  141.   Int4 BlastAaExtendRight(Int4 ** matrix,
  142. const BLAST_SequenceBlk* subject,
  143. const BLAST_SequenceBlk* query,
  144. Int4 s_off,
  145. Int4 q_off,
  146. Int4 dropoff,
  147. Int4* displacement,
  148.                 Int4 maxscore,
  149.                 Int4* s_last_off);
  150.   Int4 BlastPSSMExtendRight(Int4 ** matrix,
  151. const BLAST_SequenceBlk* subject,
  152. Int4 query_size,
  153. Int4 s_off,
  154. Int4 q_off,
  155. Int4 dropoff,
  156. Int4* displacement,
  157.                 Int4 maxscore,
  158.                 Int4* s_last_off);
  159. /**
  160.  * Beginning at s_off and q_off in the subject and query, respectively,
  161.  * extend to the left until the cumulative score becomes negative or
  162.  * drops by at least dropoff.
  163.  *
  164.  * @param matrix the substitution matrix [in]
  165.  * @param subject subject sequence [in]
  166.  * @param query query sequence [in]
  167.  * @param s_off subject offset [in]
  168.  * @param q_off query offset [in]
  169.  * @param dropoff the X dropoff parameter [in]
  170.  * @param displacement the length of the extension [out]
  171.  * @return The score of the extension
  172.  */
  173. Int4 BlastAaExtendLeft(Int4 ** matrix,
  174.        const BLAST_SequenceBlk* subject,
  175.        const BLAST_SequenceBlk* query,
  176.        Int4 s_off,
  177.        Int4 q_off,
  178.        Int4 dropoff,
  179.        Int4* displacement);
  180. Int4 BlastPSSMExtendLeft(Int4 ** matrix,
  181.        const BLAST_SequenceBlk* subject,
  182.        Int4 query_size,
  183.        Int4 s_off,
  184.        Int4 q_off,
  185.        Int4 dropoff,
  186.        Int4* displacement);
  187. /** Perform a one-hit extension. Beginning at the specified hit,
  188.  * extend to the left, then extend to the right. 
  189.  *
  190.  * @param matrix the substitution matrix [in]
  191.  * @param subject subject sequence [in]
  192.  * @param query query sequence [in]
  193.  * @param s_off subject offset [in]
  194.  * @param q_off query offset [in]
  195.  * @param dropoff X dropoff parameter [in]
  196.  * @param hsp_q the offset in the query where the HSP begins [out]
  197.  * @param hsp_s the offset in the subject where the HSP begins [out]
  198.  * @param hsp_len the length of the HSP [out]
  199.  * @param use_pssm TRUE if the scoring matrix is position-specific [in]
  200.  * @param s_last_off the rightmost subject offset examined [out]
  201.  * @return the score of the hsp.
  202.  */
  203. Int4 BlastAaExtendOneHit(Int4 ** matrix,
  204.                  const BLAST_SequenceBlk* subject,
  205.                  const BLAST_SequenceBlk* query,
  206.                  Int4 s_off,
  207.                  Int4 q_off,
  208.                  Int4 dropoff,
  209.  Int4* hsp_q,
  210.  Int4* hsp_s,
  211.  Int4* hsp_len,
  212.                  Boolean use_pssm,
  213.                  Int4* s_last_off);
  214.                  
  215. /** Perform a two-hit extension. Given two hits L and R, begin
  216.  * at R and extend to the left. If we do not reach L, abort the extension.
  217.  * Otherwise, begin at R and extend to the right.
  218.  *
  219.  * @param matrix the substitution matrix [in]
  220.  * @param subject subject sequence [in]
  221.  * @param query query sequence [in]
  222.  * @param s_left_off left subject offset [in]
  223.  * @param s_right_off right subject offset [in]
  224.  * @param q_right_off right query offset [in]
  225.  * @param dropoff X dropoff parameter [in]
  226.  * @param hsp_q the offset in the query where the HSP begins [out]
  227.  * @param hsp_s the offset in the subject where the HSP begins [out]
  228.  * @param hsp_len the length of the HSP [out]
  229.  * @param use_pssm TRUE if the scoring matrix is position-specific [in]
  230.  * @param word_size number of letters in one word [in]
  231.  * @param right_extend set to TRUE if an extension to the right happened [out]
  232.  * @param s_last_off the rightmost subject offset examined [out]
  233.  * @return the score of the hsp.
  234.  */
  235. Int4 BlastAaExtendTwoHit(Int4 ** matrix,
  236.                  const BLAST_SequenceBlk* subject,
  237.                  const BLAST_SequenceBlk* query,
  238.                  Int4 s_left_off,
  239.                  Int4 s_right_off,
  240.                  Int4 q_right_off,
  241.                  Int4 dropoff,
  242.  Int4* hsp_q,
  243.  Int4* hsp_s,
  244.  Int4* hsp_len,
  245.                  Boolean use_pssm,
  246.                  Int4 word_size,
  247.                  Boolean *right_extend,
  248.                  Int4* s_last_off);
  249. /** Update the offset for use with a new sequence.
  250.   * @param diag pointer to the diagonal array structure [in]
  251.   * @param length length of the new sequence [in]
  252.   */
  253.   
  254. Int4 DiagUpdate(BLAST_DiagTable* diag, Int4 length);
  255. /** Reset the diagonal array structure. Used when offset has wrapped around.
  256.   * @param diag pointer to the diagonal array structure [in]
  257.   */
  258. Int4 DiagClear(BLAST_DiagTable* diag);
  259. #ifdef _cplusplus
  260. }
  261. #endif
  262. #endif /* AA_UNGAPPED__H */