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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: blast_psi.h,v $
  4.  * PRODUCTION Revision 1000.0  2004/06/01 18:12:03  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.1
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef ALGO_BLAST_CORE___BLAST_PSI__H
  10. #define ALGO_BLAST_CORE___BLAST_PSI__H
  11. /* $Id: blast_psi.h,v 1000.0 2004/06/01 18:12:03 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's offical duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Author:  Christiam Camacho
  37.  *
  38.  */
  39. /** @file blast_psi.h
  40.  * High level definitions and declarations for the PSI-BLAST API.
  41.  */
  42. #include <algo/blast/core/ncbi_std.h>
  43. #include <algo/blast/core/blast_stat.h>
  44. #include <algo/blast/core/blast_options.h>
  45. #ifdef __cplusplus
  46. extern "C" {
  47. #endif
  48. #ifndef REAL_PROT_ALPHABET
  49. #   define REAL_PROT_ALPHABET   20
  50. #endif
  51. /* Defaults for PSI-BLAST options - these are application level options */
  52. #define PSI_MAX_NUM_PASSES      1
  53. #define PSI_SCALING_FACTOR      32
  54. /** Percent identity threshold for discarding near-identical matches */
  55. #define PSI_NEAR_IDENTICAL      0.94
  56. #define PSI_IDENTICAL           1.0
  57. /** Structure to describe the characteristics of a position in the model */
  58. typedef struct PsiDesc {
  59.     Uint1 letter;               /**< Preferred letter at this position */
  60.     Boolean used;               /**< Is this letter being used? */
  61.     double e_value;             /**< E-value of the highest HSP including this
  62.                                      position */
  63.     SSeqRange extents;          /**< Extent of this aligned position */
  64. } PsiDesc;
  65. typedef struct PsiInfo {
  66.     Uint4 query_sz;  /**< Size of the query */
  67.     Uint4 num_seqs;  /**< Number of sequences in involved w/o including
  68.                                  the query */
  69. } PsiInfo;
  70. /** This structure is to be populated at the API level from the Seq-aligns */
  71. typedef struct PsiAlignmentData {
  72.     Uint4** res_counts;/**< matrix which keeps track of the number of
  73.                                residues aligned with the query at each query 
  74.                                position (columns of multiple alignment). Its
  75.                                dimensions are query_sz by alphabet_size */
  76.     Uint4* match_seqs;/**< Count of how many sequences match the query
  77.                                at each query position, default value is 1 to 
  78.                                include the query itself. This dynamically 
  79.                                allocated array has a length of query_sz */
  80.     PsiDesc** desc_matrix;   /**< Matrix of PsiDesc structures, each cell
  81.                                   represents an aligned character with the 
  82.                                   query. Its dimensions are query_sz by
  83.                                   num_seqs + 1. */
  84.     Boolean* use_sequences;  /**< Determines if sequences must be used or not.
  85.                                   This dynamically allocated array has a length
  86.                                   of num_seqs + 1. */
  87.     PsiInfo* dimensions;     /**< Dimensions of the multiple sequence alignment
  88.                                (query size by number of sequences aligned + 1
  89.                                (to include the query) */
  90.     Uint1* query;   /**< Query sequence (aka master, consensus) */
  91. } PsiAlignmentData;
  92. /** The functions to create internal structure to store intermediate data 
  93.  * while creating a PSSM */
  94. PsiAlignmentData*
  95. PSIAlignmentDataNew(const Uint1* query, const PsiInfo* info);
  96. PsiAlignmentData*
  97. PSIAlignmentDataFree(PsiAlignmentData* align_data);
  98. /** This is the return value from all the processing performed in this library.
  99.  * At the API level this information should be copied into an Score-mat ASN.1
  100.  * object */
  101. typedef struct PsiMatrix {
  102.     int** pssm;             /**< The PSSM, its dimensions are query_sz+1 by 
  103.                                  PSI_ALPHABET_SIZE */
  104.     int** scaled_pssm;      /**< not to be used by the public ? Dimensions are
  105.                                  the same as above Needed in the last 2 stages
  106.                                  of PSI-BLAST */
  107.     double** res_freqs;     /**< The residue frequencies. Dimensions are the
  108.                                  same as above (FIXME?) */
  109.     Uint4 ncols;     /**< Number of columns in the matrices above
  110.                                  (query size+1) */
  111. } PsiMatrix;
  112. /** Allocates a new PsiMatrix structure */
  113. PsiMatrix*
  114. PSIMatrixNew(Uint4 query_sz, Uint4 alphabet_size);
  115. /** Deallocates the PsiMatrix structure passed in.
  116.  * @param matrix structure to deallocate [in]
  117.  * @return NULL
  118.  */
  119. PsiMatrix*
  120. PSIMatrixFree(PsiMatrix* matrix);
  121. /** This structure returns detailed information collected during the process of
  122.  * creating a PSSM.
  123.  */
  124. typedef struct PsiDiagnostics {
  125.     double** info_content;
  126.     Uint4 ncols;     /**< Number of columns in the matrix above
  127.                                  (query size+1) */
  128.     /* FIXME: add sequence weights */
  129. } PsiDiagnostics;
  130. /** Allocates a new PSI-BLAST diagnostics structure
  131.  */
  132. PsiDiagnostics*
  133. PSIDiagnosticsNew(Uint4 query_sz, Uint4 alphabet_size);
  134. /** Deallocates the PsiDiagnostics structure passed in.
  135.  * @param diags structure to deallocate [in]
  136.  * @return NULL
  137.  */
  138. PsiDiagnostics*
  139. PSIDiagnosticsFree(PsiDiagnostics* diags);
  140. /****************************************************************************/
  141. /* TOP LEVEL FUNCTION FIXME: alignment should contain data from multiple
  142.  * sequence alignment 
  143.  * @param diagnostics If non-NULL this structure will be populated and it is
  144.  *        the caller's responsibility to deallocate this structure.
  145.  * @retval The PSSM along with residue frequencies and statistical information
  146.  * (the latter is returned in the sbp)
  147.  */
  148. PsiMatrix*
  149. PSICreatePSSM(PsiAlignmentData* alignment,      /* [in] but modified */
  150.               const PSIBlastOptions* options,   /* [in] */
  151.               BlastScoreBlk* sbp,               /* [in] */
  152.               PsiDiagnostics* diagnostics);     /* [out] */
  153. #ifdef __cplusplus
  154. }
  155. #endif
  156. #endif /* !ALGO_BLAST_CORE__BLAST_PSI__H */