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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: cav_alndisplay.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 20:57:15  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.2
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: cav_alndisplay.hpp,v 1000.0 2003/10/29 20:57:15 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. *      Classes to hold alignment display
  38. *
  39. * ===========================================================================
  40. */
  41. #ifndef CAV_ALIGNMENT_DISPLAY__HPP
  42. #define CAV_ALIGNMENT_DISPLAY__HPP
  43. #include <corelib/ncbistl.hpp>
  44. #include <corelib/ncbistre.hpp>
  45. #include <list>
  46. #include <vector>
  47. #include <objtools/cddalignview/cddalignview.h>
  48. BEGIN_NCBI_SCOPE
  49. class Sequence;
  50. class SequenceSet;
  51. class AlignmentSet;
  52. ///// classes that go into the AlignmentDisplay /////
  53. class TextRow
  54. {
  55. private:
  56.     string chars;
  57. public:
  58.     TextRow(const string& str) : chars(str) { }         // initialize to string
  59.     TextRow(int size) : chars(string(size, '-')) { }   // initialize to blank (all '-')
  60.     int Length(void) const { return chars.size(); }
  61.     void InsertGaps(int nGaps, int beforePos);
  62.     void DeleteGaps(int nGaps, int startPos);
  63.     char GetCharAt(int alnLoc) const { return chars[alnLoc]; }
  64.     void SetCharAt(int alnLoc, char ch) { chars[alnLoc] = ch; }
  65.     bool IsSqueezable(int alnLoc, int *nGaps, int *startPos, int maxGaps) const;
  66. };
  67. class IndexAlnLocToSeqLocRow
  68. {
  69. private:
  70.     typedef vector < int > IntVec;
  71.     IntVec seqLocs;
  72. public:
  73.     IndexAlnLocToSeqLocRow(const Sequence *seq, int length = 0);
  74.     const Sequence *sequence;
  75.     int Length(void) const { return seqLocs.size(); }
  76.     void InsertGaps(int nGaps, int beforePos);
  77.     int GetSeqLocAt(int alnLoc) const { return seqLocs[alnLoc]; }
  78.     void SetSeqLocAt(int alnLoc, int seqLoc) { seqLocs[alnLoc] = seqLoc; }
  79.     void ReIndex(const TextRow& textRow);
  80. };
  81. ///// the actual AlignmentDisplay structure /////
  82. class AlignmentDisplay
  83. {
  84. private:
  85.     typedef vector < IndexAlnLocToSeqLocRow * > IndexAlnLocToSeqLocRows;
  86.     IndexAlnLocToSeqLocRows indexAlnLocToSeqLocRows;
  87.     typedef vector < TextRow * > TextRows;
  88.     TextRows textRows;
  89.     int firstAlnLoc, lastAlnLoc;
  90.     void InsertGaps(int nGaps, int beforePos);
  91.     void ShiftUnalignedLeft(void);
  92.     void Squeeze(void);
  93.     void SplitUnaligned(void);
  94.     int status;
  95. public:
  96.     AlignmentDisplay(const SequenceSet *sequenceSet, const AlignmentSet *alignmentSet);
  97.     ~AlignmentDisplay();
  98.     // query functions
  99.     int GetWidth(void) const { return textRows[0]->Length(); }
  100.     int GetNRows(void) const { return textRows.size(); }
  101.     char GetCharAt(int alnLoc, int row) const;
  102.     int GetFirstAlignedLoc(void) const { return firstAlnLoc; }
  103.     int GetLastAlignedLoc(void) const { return lastAlnLoc; }
  104.     static const double SHOW_IDENTITY;
  105.     const string& GetColumnColor(int alnLoc, double conservationThreshhold) const;
  106.     // DumpText - plain text or HTML output controlled by 'options'
  107.     int DumpText(CNcbiOstream& os, unsigned int options,
  108.         int firstCol, int lastCol, int nColumns, double conservationThreshhold = 2.0,
  109.         const char *titleHTML = NULL, int nFeatures = 0, const AlignmentFeature *alnFeatures = NULL) const;
  110.     // DumpCondensed - plain text or HTML output with incompletely aligned columns not explicitly shown
  111.     int DumpCondensed(CNcbiOstream& os, unsigned int options,
  112.         int firstCol, int lastCol, int nColumns, double conservationThreshhold = 2.0,
  113.         const char *titleHTML = NULL, int nFeatures = 0, const AlignmentFeature *alnFeatures = NULL) const;
  114.     // FASTA
  115.     int DumpFASTA(int firstCol, int lastCol, int nColumns, bool doLowercase, CNcbiOstream& outStream) const;
  116.     int Status(void) const { return status; }
  117. };
  118. // character type utilitles
  119. inline bool IsUnaligned(char ch) { return (ch >= 'a' && ch <= 'z'); }
  120. inline bool IsAligned(char ch) { return (ch >= 'A' && ch <= 'Z'); }
  121. inline bool IsGap(char ch) { return (ch == '-'); }
  122. END_NCBI_SCOPE
  123. #endif
  124. /*
  125. * ---------------------------------------------------------------------------
  126. * $Log: cav_alndisplay.hpp,v $
  127. * Revision 1000.0  2003/10/29 20:57:15  gouriano
  128. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.2
  129. *
  130. * Revision 1.2  2003/06/02 16:01:38  dicuccio
  131. * Rearranged include/objects/ subtree.  This includes the following shifts:
  132. *     - include/objects/alnmgr --> include/objtools/alnmgr
  133. *     - include/objects/cddalignview --> include/objtools/cddalignview
  134. *     - include/objects/flat --> include/objtools/flat
  135. *     - include/objects/objmgr/ --> include/objmgr/
  136. *     - include/objects/util/ --> include/objmgr/util/
  137. *     - include/objects/validator --> include/objtools/validator
  138. *
  139. * Revision 1.1  2003/03/19 19:05:31  thiessen
  140. * move again
  141. *
  142. * Revision 1.1  2003/03/19 05:33:43  thiessen
  143. * move to src/app/cddalignview
  144. *
  145. * Revision 1.14  2003/02/03 17:52:03  thiessen
  146. * move CVS Log to end of file
  147. *
  148. * Revision 1.13  2003/01/21 18:01:07  thiessen
  149. * add condensed alignment display
  150. *
  151. * Revision 1.12  2003/01/21 12:31:14  thiessen
  152. * move includes into src dir
  153. *
  154. * Revision 1.11  2002/11/08 19:38:15  thiessen
  155. * add option for lowercase unaligned in FASTA
  156. *
  157. * Revision 1.10  2002/02/08 19:53:59  thiessen
  158. * add annotation to text/HTML displays
  159. *
  160. * Revision 1.9  2001/03/02 01:19:29  thiessen
  161. * add FASTA output
  162. *
  163. * Revision 1.8  2001/02/15 19:23:06  thiessen
  164. * add identity coloring
  165. *
  166. * Revision 1.7  2001/02/14 16:05:46  thiessen
  167. * add block and conservation coloring to HTML display
  168. *
  169. * Revision 1.6  2001/01/29 23:55:03  thiessen
  170. * add AlignmentDisplay verification
  171. *
  172. * Revision 1.5  2001/01/29 18:13:41  thiessen
  173. * split into C-callable library + main
  174. *
  175. * Revision 1.4  2001/01/25 00:50:51  thiessen
  176. * add command-line args; can read asn data from stdin
  177. *
  178. * Revision 1.3  2001/01/23 17:34:06  thiessen
  179. * add HTML output
  180. *
  181. * Revision 1.2  2001/01/22 15:54:10  thiessen
  182. * correctly set up ncbi namespacing
  183. *
  184. * Revision 1.1  2001/01/22 13:15:51  thiessen
  185. * initial checkin
  186. *
  187. */