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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: struct_dp.h,v $
  4.  * PRODUCTION Revision 1000.0  2004/04/14 20:27:00  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.1
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: struct_dp.h,v 1000.0 2004/04/14 20:27:00 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:  Paul Thiessen
  35. *
  36. * File Description:
  37. *      Dynamic programming-based alignment algorithms (C interface)
  38. *
  39. * ===========================================================================
  40. */
  41. #ifndef STRUCT_DP__H
  42. #define STRUCT_DP__H
  43. #ifdef __cplusplus
  44. extern "C" {
  45. #endif
  46. /* function result codes */
  47. #define STRUCT_DP_FOUND_ALIGNMENT  1  /* found an alignment */
  48. #define STRUCT_DP_NO_ALIGNMENT     2  /* algorithm successful, but no significant alignment found */
  49. #define STRUCT_DP_PARAMETER_ERROR  3  /* error/inconsistency in function parameters */
  50. #define STRUCT_DP_ALGORITHM_ERROR  4  /* error encountered during algorithm execution */
  51. #define STRUCT_DP_OKAY             5  /* generic ok status */
  52. /* lowest possible score */
  53. extern const int DP_NEGATIVE_INFINITY;
  54. /* highest possible loop penalty */
  55. extern const unsigned int DP_POSITIVE_INFINITY;
  56. /*
  57.  * Block alignment structures and functions
  58.  */
  59. /* use for block that is not frozen */
  60. extern const unsigned int DP_UNFROZEN_BLOCK;
  61. /* info on block structure */
  62. typedef struct {
  63.     unsigned int nBlocks;           /* number of blocks */
  64.     unsigned int *blockPositions;   /* first residue of each block on subject (zero-numbered) */
  65.     unsigned int *blockSizes;       /* length of each block */
  66.     unsigned int *maxLoops;         /* nBlocks-1 max loop sizes */
  67.     unsigned int *freezeBlocks;     /* first residue of each block on query (zero-numbered) if frozen;
  68.                                         DP_UNFROZEN_BLOCK otherwise (default); global alignment only! */
  69. } DP_BlockInfo;
  70. /* convenience functions for allocating/destroying BlockInfo structures;
  71.    do not use free (MemFree), because these are C++-allocated! */
  72. extern DP_BlockInfo * DP_CreateBlockInfo(unsigned int nBlocks);
  73. extern void DP_DestroyBlockInfo(DP_BlockInfo *blocks);
  74. /* standard function for calculating max loop length, given a list of the sizes of all the
  75.    corresponding loops in each sequence/row of an existing multiple alignment:
  76.         if percentile < 1.0:
  77.             max = (len such that <percentile>% of loops are <= len) + extension
  78.         else if percentile >= 1.0:
  79.             max = (<percentile> * max loop len)(rounded) + extension
  80.         if cutoff > 0, max will be truncated to be <= cutoff
  81. */
  82. extern unsigned int DP_CalculateMaxLoopLength(
  83.     unsigned int nLoops, const unsigned int *loopLengths,   /* based on existing alignment */
  84.     double percentile, unsigned int extension, unsigned int cutoff);
  85. /* callback function to get the score for a block at a specified position; should
  86.    return DP_NEGATIVE_INFINITY if the block can't be aligned at this position. For
  87.    local alignments, the average expected score for a random match must be <= zero. */
  88. typedef int (*DP_BlockScoreFunction)(unsigned int block, unsigned int queryPos);
  89. /* returned alignment structure */
  90. typedef struct {
  91.     int score;                      /* alignment score */
  92.     unsigned int nBlocks;           /* number of blocks in this alignment */
  93.     unsigned int firstBlock;        /* first block aligned (w.r.t. subject blocks) */
  94.     unsigned int *blockPositions;   /* positions of blocks on query (zero-numbered) */
  95. } DP_AlignmentResult;
  96. /* for destroying alignment result; do not use free (MemFree) */
  97. extern void DP_DestroyAlignmentResult(DP_AlignmentResult *alignment);
  98. /* global alignment routine */
  99. extern int                              /* returns an above STRUCT_DP_ status code */
  100. DP_GlobalBlockAlign(
  101.     const DP_BlockInfo *blocks,         /* blocks on subject */
  102.     DP_BlockScoreFunction BlockScore,   /* scoring function for blocks on query */
  103.     unsigned int queryFrom,             /* range of query to search */
  104.     unsigned int queryTo,
  105.     DP_AlignmentResult **alignment      /* alignment, if one found; caller should destroy */
  106. );
  107. /* local alignment routine */
  108. extern int                              /* returns an above STRUCT_DP_ status code */
  109. DP_LocalBlockAlign(
  110.     const DP_BlockInfo *blocks,         /* blocks on subject; NOTE: block freezing ignored! */
  111.     DP_BlockScoreFunction BlockScore,   /* scoring function for blocks on query */
  112.     unsigned int queryFrom,             /* range of query to search */
  113.     unsigned int queryTo,
  114.     DP_AlignmentResult **alignment      /* alignment, if one found; caller should destroy */
  115. );
  116. /* returned alignment container for multiple tracebacks */
  117. typedef struct {
  118.     unsigned int nAlignments;           /* number of alignments returned */
  119.     DP_AlignmentResult *alignments;     /* individual alignments, highest-scoring first */
  120. } DP_MultipleAlignmentResults;
  121. /* for destroying multiple alignment results; do not use free (MemFree) */
  122. extern void DP_DestroyMultipleAlignmentResults(DP_MultipleAlignmentResults *alignments);
  123. /* local alignment routine returning sorted list of highest-scoring alignments */
  124. extern int                              /* returns an above STRUCT_DP_ status code */
  125. DP_MultipleLocalBlockAlign(
  126.     const DP_BlockInfo *blocks,         /* blocks on subject; NOTE: block freezing ignored! */
  127.     DP_BlockScoreFunction BlockScore,   /* scoring function for blocks on query */
  128.     unsigned int queryFrom,             /* range of query to search */
  129.     unsigned int queryTo,
  130.     DP_MultipleAlignmentResults **alignments,   /* alignments, if any found; caller should destroy */
  131.     unsigned int maxAlignments          /* max # alignments to return, 0 == unlimited (all) */
  132. );
  133. /* callback function to get the score (a positive or zero penalty) for a given loop number and length */
  134. typedef unsigned int (*DP_LoopPenaltyFunction)(unsigned int loopNumber, unsigned int loopLength);
  135. /* global alignment routine for generic loop scoring function */
  136. extern int                              /* returns an above STRUCT_DP_ status code */
  137. DP_GlobalBlockAlignGeneric(
  138.     const DP_BlockInfo *blocks,         /* blocks on subject; note that maxLoops are ignored! */
  139.     DP_BlockScoreFunction BlockScore,   /* scoring function for blocks on query */
  140.     DP_LoopPenaltyFunction LoopScore,   /* loop scoring function */
  141.     unsigned int queryFrom,             /* range of query to search */
  142.     unsigned int queryTo,
  143.     DP_AlignmentResult **alignment      /* alignment, if one found; caller should destroy */
  144. );
  145. /* local alignment routine for generic loop scoring */
  146. extern int                              /* returns an above STRUCT_DP_ status code */
  147. DP_LocalBlockAlignGeneric(
  148.     const DP_BlockInfo *blocks,         /* blocks on subject; NOTE: block freezing ignored! */
  149.     DP_BlockScoreFunction BlockScore,   /* scoring function for blocks on query */
  150.     DP_LoopPenaltyFunction LoopScore,   /* loop scoring function */
  151.     unsigned int queryFrom,             /* range of query to search */
  152.     unsigned int queryTo,
  153.     DP_AlignmentResult **alignment      /* alignment, if one found; caller should destroy */
  154. );
  155. /* local generic alignment routine returning sorted list of highest-scoring alignments */
  156. extern int                              /* returns an above STRUCT_DP_ status code */
  157. DP_MultipleLocalBlockAlignGeneric(
  158.     const DP_BlockInfo *blocks,         /* blocks on subject; NOTE: block freezing ignored! */
  159.     DP_BlockScoreFunction BlockScore,   /* scoring function for blocks on query */
  160.     DP_LoopPenaltyFunction LoopScore,   /* loop scoring function */
  161.     unsigned int queryFrom,             /* range of query to search */
  162.     unsigned int queryTo,
  163.     DP_MultipleAlignmentResults **alignments,   /* alignments, if any found; caller should destroy */
  164.     unsigned int maxAlignments          /* max # alignments to return, 0 == unlimited (all) */
  165. );
  166. #ifdef __cplusplus
  167. }
  168. #endif
  169. #endif /* STRUCT_DP__H */
  170. /*
  171. * ---------------------------------------------------------------------------
  172. * $Log: struct_dp.h,v $
  173. * Revision 1000.0  2004/04/14 20:27:00  gouriano
  174. * PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.1
  175. *
  176. * Revision 1.1  2004/02/19 01:46:04  thiessen
  177. * move to include/algo/structure/struct_dp
  178. *
  179. * Revision 1.12  2003/12/19 14:37:50  thiessen
  180. * add local generic loop function alignment routines
  181. *
  182. * Revision 1.11  2003/12/08 16:33:59  thiessen
  183. * fix signed/unsigned mix
  184. *
  185. * Revision 1.10  2003/12/08 16:21:36  thiessen
  186. * add generic loop scoring function interface
  187. *
  188. * Revision 1.9  2003/09/07 00:06:19  thiessen
  189. * add multiple tracebacks for local alignments
  190. *
  191. * Revision 1.8  2003/08/22 14:28:49  thiessen
  192. * add standard loop calculating function
  193. *
  194. * Revision 1.7  2003/07/11 15:27:48  thiessen
  195. * add DP_ prefix to globals
  196. *
  197. * Revision 1.6  2003/06/22 12:11:37  thiessen
  198. * add local alignment
  199. *
  200. * Revision 1.5  2003/06/19 13:48:23  thiessen
  201. * cosmetic/typo fixes
  202. *
  203. * Revision 1.4  2003/06/18 21:46:09  thiessen
  204. * add traceback, alignment return structure
  205. *
  206. * Revision 1.3  2003/06/18 19:17:17  thiessen
  207. * try once more to fix lf issue
  208. *
  209. * Revision 1.2  2003/06/18 19:10:17  thiessen
  210. * fix lf issues
  211. *
  212. * Revision 1.1  2003/06/18 16:54:12  thiessen
  213. * initial checkin; working global block aligner and demo app
  214. *
  215. */