]> git.donarmstrong.com Git - mothur.git/blob - sequence.cpp
filterseqscommand added
[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 "sequence.hpp"
13
14 /***********************************************************************/
15
16 Sequence::Sequence()  {}
17
18 /***********************************************************************/
19
20 Sequence::Sequence(string newName, string sequence) {
21         name = newName;
22         if(sequence.find_first_of('-') != string::npos) {
23                 setAligned(sequence);
24         }
25         setUnaligned(sequence);
26 }
27
28 //********************************************************************************************************************
29
30 string Sequence::convert2ints() {
31         
32         if(unaligned == "")     {       /* need to throw an error */    }
33         
34         string processed;
35         
36         for(int i=0;i<unaligned.length();i++) {
37                 if(toupper(unaligned[i]) == 'A')                        {       processed += '0';       }
38                 else if(toupper(unaligned[i]) == 'C')   {       processed += '1';       }
39                 else if(toupper(unaligned[i]) == 'G')   {       processed += '2';       }
40                 else if(toupper(unaligned[i]) == 'T')   {       processed += '3';       }
41                 else if(toupper(unaligned[i]) == 'U')   {       processed += '3';       }
42                 else                                                                    {       processed += '4';       }
43         }
44         return processed;
45 }
46
47 //********************************************************************************************************************
48
49 void Sequence::setName(string seqName) {
50         if(seqName[0] == '>')   {       name = seqName.substr(1);       }
51         else                                    {       name = seqName;                         }
52 }
53
54 //********************************************************************************************************************
55
56 void Sequence::setUnaligned(string sequence){
57         
58         if(sequence.find_first_of('-') != string::npos) {
59                 string temp = "";
60                 for(int j=0;j<sequence.length();j++) {
61                         if(isalpha(sequence[j]))        {       temp += sequence[j];    }
62                 }
63                 unaligned = temp;
64         }
65         else {
66                 unaligned = sequence;
67         }
68         
69 }
70
71 //********************************************************************************************************************
72
73 void Sequence::setAligned(string sequence){
74         aligned = sequence;
75 }
76
77 //********************************************************************************************************************
78
79 void Sequence::setPairwise(string sequence){
80         pairwise = sequence;
81 }
82
83 //********************************************************************************************************************
84
85 string Sequence::getName(){
86         return name;
87 }
88
89 //********************************************************************************************************************
90
91 string Sequence::getAligned(){
92         return aligned;
93 }
94
95 //********************************************************************************************************************
96
97 string Sequence::getPairwise(){
98         return pairwise;
99 }
100
101 //********************************************************************************************************************
102
103 string Sequence::getUnaligned(){
104         return unaligned;
105 }
106
107 //********************************************************************************************************************
108
109 int Sequence::getLength(){
110         if(unaligned.length() > aligned.length())
111                 return unaligned.length();
112         return aligned.length();
113 }
114
115 //********************************************************************************************************************
116
117 void Sequence::printSequence(ofstream& out){
118         string toPrint = unaligned;
119         if(aligned.length() > unaligned.length())
120                 toPrint = aligned;
121         out << ">" << name << "\n" << toPrint << "\n";
122 }
123
124 //********************************************************************************************************************