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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: aln_reader.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/04/12 17:38:32  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.2
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef OBJTOOLS_READERS___ALN_READER__HPP
  10. #define OBJTOOLS_READERS___ALN_READER__HPP
  11. /*  $Id: aln_reader.hpp,v 1000.0 2004/04/12 17:38:32 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 official 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.  * Authors:  Josh Cherry
  37.  *
  38.  * File Description:  C++ wrappers for alignment file reading
  39.  *
  40.  */
  41. #include <corelib/ncbistd.hpp>
  42. #include <objects/seqalign/Seq_align.hpp>
  43. #include <objects/seqset/Seq_entry.hpp>
  44. BEGIN_NCBI_SCOPE
  45. ///
  46. /// class CAlnReader supports importing a large variety of text-based
  47. /// alignment formats into standard data structures.
  48. ///
  49. class NCBI_XOBJREAD_EXPORT CAlnReader
  50. {
  51. public:
  52.     // alphabets to try
  53.     enum EAlphabet {
  54.         eAlpha_Nucleotide,
  55.         eAlpha_Protein
  56.     };
  57.     // constructor
  58.     CAlnReader(CNcbiIstream& is) : m_IS(is), m_ReadDone(false) {};
  59.     // destructor
  60.     ~CAlnReader(void);
  61.     /// Sequence data accessors and modifiers:
  62.     const string& GetAlphabet(void) const;
  63.     string&       SetAlphabet(void);
  64.     void          SetAlphabet(const string& value);
  65.     void          SetAlphabet(EAlphabet alpha);
  66.     const string& GetBeginningGap(void) const;
  67.     string&       SetBeginningGap(void);
  68.     void          SetBeginningGap(const string& value);
  69.     const string& GetMiddleGap(void) const;
  70.     string&       SetMiddleGap(void);
  71.     void          SetMiddleGap(const string& value);
  72.     const string& GetEndGap(void) const;
  73.     string&       SetEndGap(void);
  74.     void          SetEndGap(const string& value);
  75.     /// Convenience function for setting beginning, middle, and
  76.     /// end gap to the same thing
  77.     void          SetAllGap(const string& value);
  78.     const string& GetMissing(void)                     const {return m_Missing;};
  79.     string&       SetMissing(void)                           {return m_Missing;};
  80.     void          SetMissing(const string& value)            {m_Missing = value;};
  81.     const string& GetMatch(void)                       const {return m_Match;};
  82.     string&       SetMatch(void)                             {return m_Match;};
  83.     void          SetMatch(const string& value)              {m_Match = value;};
  84.     /// Alternative & easy way to choose alphabet, etc.
  85.     void SetClustal(EAlphabet alpha);
  86.     void SetPhylip(EAlphabet alpha);
  87.     void SetPaup(EAlphabet alpha);
  88.     /// Read the file
  89.     /// This is the main function
  90.     /// that would parse the alignment file and create the result data
  91.     void Read();
  92.     /// Parsed result data accessors
  93.     const vector<string>& GetIds(void)       const {return m_Ids;};
  94.     const vector<string>& GetSeqs(void)      const {return m_Seqs;};
  95.     const vector<string>& GetOrganisms(void) const {return m_Organisms;};
  96.     const vector<string>& GetDeflines(void)  const {return m_Deflines;};
  97.     int                   GetDim(void)       const {return m_Dim;};
  98.     /// Create ASN.1 classes from the parsed alignment
  99.     CRef<objects::CSeq_align> GetSeqAlign(void);
  100.     CRef<objects::CSeq_entry> GetSeqEntry(void);
  101. private:
  102.     /// Prohibit copy constructor and assignment operator
  103.     CAlnReader(const CAlnReader& value);
  104.     CAlnReader& operator=(const CAlnReader& value);
  105.     /// A bunch of strings listing characters with various
  106.     /// meanings in an alignment file.
  107.     /// Analogous to SSequenceInfo.
  108.     string m_Alphabet;
  109.     string m_BeginningGap;
  110.     string m_MiddleGap;
  111.     string m_EndGap;
  112.     string m_Missing;
  113.     string m_Match;
  114.     /// Parsed result data (analogous to SAlignmentFile)
  115.     /// Seqs are upper-case strings representing the sequences, with
  116.     /// '-' for a gap.  Ids are ids read from file.  Organisms and
  117.     /// Deflines may not be set, depending on the file.
  118.     vector<string> m_Ids;
  119.     vector<string> m_Seqs;
  120.     vector<string> m_Organisms;
  121.     vector<string> m_Deflines;
  122.     /// Other internal data
  123.     CNcbiIstream&             m_IS;
  124.     bool                      m_ReadDone;
  125.     int                       m_Dim;
  126.     CRef<objects::CSeq_align> m_Aln;
  127.     CRef<objects::CSeq_entry> m_Entry;
  128.     vector<string>            m_SeqVec; 
  129.     vector<TSeqPos>           m_SeqLen; 
  130. };
  131. ///////////////////////////////////////////////////////////////////////
  132. //
  133. //  Inline Methods
  134. //
  135. inline
  136. const string& CAlnReader::GetAlphabet(void) const
  137. {
  138.     return m_Alphabet;
  139. }
  140. inline
  141. string& CAlnReader::SetAlphabet(void)
  142. {
  143.     return m_Alphabet;
  144. }
  145. inline
  146. void CAlnReader::SetAlphabet(const string& value)
  147. {
  148.     m_Alphabet = value;
  149. }
  150. inline
  151. const string& CAlnReader::GetBeginningGap(void) const
  152. {
  153.     return m_BeginningGap;
  154. }
  155. inline
  156. string& CAlnReader::SetBeginningGap(void)
  157. {
  158.     return m_BeginningGap;
  159. }
  160. inline
  161. void CAlnReader::SetBeginningGap(const string& value)
  162. {
  163.     m_BeginningGap = value;
  164. }
  165. inline
  166. const string& CAlnReader::GetMiddleGap(void) const
  167. {
  168.     return m_MiddleGap;
  169. }
  170. inline
  171. string& CAlnReader::SetMiddleGap(void)
  172. {
  173.     return m_MiddleGap;
  174. }
  175. inline
  176. void CAlnReader::SetMiddleGap(const string& value)
  177. {
  178.     m_MiddleGap = value;
  179. }
  180. inline
  181. const string& CAlnReader::GetEndGap(void) const
  182. {
  183.     return m_EndGap;
  184. }
  185.     
  186. inline
  187. string& CAlnReader::SetEndGap(void)
  188. {
  189.     return m_EndGap;
  190. }
  191. inline
  192. void CAlnReader::SetEndGap(const string& value)
  193. {
  194.     m_EndGap = value;
  195. }
  196. inline
  197. void CAlnReader::SetAlphabet(EAlphabet alpha)
  198. {
  199.     switch (alpha) {
  200.     case eAlpha_Nucleotide:
  201.         // Nucleotide alphabet: IUPAC plus 'x'
  202.         SetAlphabet("ABCDGHKMNRSTUVWXYabcdghkmnrstuvwxy");
  203.         break;
  204.     case eAlpha_Protein:
  205.         SetAlphabet("ABCDEFGHIKLMNPQRSTUVWXYZabcdefghiklmnpqrstuvwxyz");
  206.         break;
  207.     }
  208. }
  209. inline
  210. void CAlnReader::SetAllGap(const string& value)
  211. {
  212.     m_BeginningGap = m_MiddleGap = m_EndGap = value;
  213. };
  214. END_NCBI_SCOPE
  215. #endif // OBJTOOLS_READERS___ALN_READER__HPP
  216. /*
  217.  * ===========================================================================
  218.  * $Log: aln_reader.hpp,v $
  219.  * Revision 1000.0  2004/04/12 17:38:32  gouriano
  220.  * PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.2
  221.  *
  222.  * Revision 1.2  2004/03/01 15:26:32  dicuccio
  223.  * Code clean-up.  Added enum for standard alphabets.  Added new APIs to set
  224.  * standard parameters for other alignment types (implemented with unclear details
  225.  * currently).  Added better exception handling.
  226.  *
  227.  * Revision 1.1  2004/02/19 16:55:27  todorov
  228.  * File moved from util/creaders and renamed to aln_reader
  229.  *
  230.  * Revision 1.2  2004/02/18 22:29:17  todorov
  231.  * Converted to single class. Added methods for creating Seq-align and Seq-entry. A working version, but still need to polish: seq-ids, na/aa recognition, etc.
  232.  *
  233.  * Revision 1.1  2004/02/09 16:02:36  jcherry
  234.  * Initial versionnnn
  235.  *
  236.  * ===========================================================================
  237.  */