]> git.donarmstrong.com Git - mothur.git/blob - sequence.cpp
Initial revision
[mothur.git] / sequence.cpp
1 /*
2  *  sequence.cpp
3  *  
4  *
5  *  Created by Pat Schloss on 12/15/08.
6  *  Copyright 2008 Patrick D. Schloss. All rights reserved.
7  *
8  */
9
10 using namespace std;
11
12 #include <string>
13 #include <fstream>
14
15 #include "sequence.hpp"
16
17 //********************************************************************************************************************
18
19 Sequence::Sequence(){}
20
21 //********************************************************************************************************************
22
23 Sequence::Sequence(ifstream& fastaFile){
24         
25         string accession;
26         fastaFile >> accession;
27         setName(accession);
28
29         char letter;
30         string sequence;
31         
32         while(fastaFile && letter != '>'){
33         
34                 letter = fastaFile.get();
35                 
36                 if(isalpha(letter)){
37                 
38                         sequence += letter;
39                         
40                 }
41                 
42         }
43         fastaFile.putback(letter);
44
45         if(sequence.find_first_of('-') != string::npos){
46                 setAligned(sequence);
47         }
48         setUnaligned(sequence);
49 }
50
51
52 //********************************************************************************************************************
53
54 string Sequence::convert2ints(){
55         
56         if(unaligned == "")     {       /* need to throw an error */    }
57         
58         string processed;
59         
60         for(int i=0;i<unaligned.length();i++){
61                 if(toupper(unaligned[i]) == 'A')                        {       processed += '0';       }
62                 else if(toupper(unaligned[i]) == 'C')   {       processed += '1';       }
63                 else if(toupper(unaligned[i]) == 'G')   {       processed += '2';       }
64                 else if(toupper(unaligned[i]) == 'T')   {       processed += '3';       }
65                 else if(toupper(unaligned[i]) == 'U')   {       processed += '3';       }
66                 else                                                                    {       processed += '4';       }
67         }
68         return processed;
69 }
70
71 //********************************************************************************************************************
72
73 void Sequence::setName(string seqName){
74         if(seqName[0] == '>')   {       name = seqName.substr(1);       }
75         else                                    {       name = seqName;                         }
76 }
77
78 //********************************************************************************************************************
79
80 void Sequence::setUnaligned(string sequence){
81         
82         if(sequence.find_first_of('-') != string::npos){
83                 string temp = "";
84                 for(int j=0;j<sequence.length();j++){
85                         if(isalpha(sequence[j]))        {       temp += sequence[j];    }
86                 }
87                 unaligned = temp;
88         }
89         else{
90                 unaligned = sequence;
91         }
92         
93 }
94
95 //********************************************************************************************************************
96
97 void Sequence::setAligned(string sequence){
98         aligned = sequence;
99 }
100
101 //********************************************************************************************************************
102
103 void Sequence::setPairwise(string sequence){
104         pairwise = sequence;
105 }
106
107 //********************************************************************************************************************
108
109 string Sequence::getSeqName(){
110         return name;
111 }
112
113 //********************************************************************************************************************
114
115 string Sequence::getAligned(){
116         return aligned;
117 }
118
119 //********************************************************************************************************************
120
121 string Sequence::getPairwise(){
122         return pairwise;
123 }
124
125 //********************************************************************************************************************
126
127 string Sequence::getUnaligned(){
128         return unaligned;
129 }
130
131 //********************************************************************************************************************