5 * Created by Pat Schloss on 8/8/08.
6 * Copyright 2008 Patrick D. Schloss. All rights reserved.
10 #include "ordervector.hpp"
13 /***********************************************************************/
15 OrderVector::OrderVector() : DataVector() {}
17 /***********************************************************************/
19 //OrderVector::OrderVector(int ns) : DataVector(), data(ns, -1) {}
21 /***********************************************************************/
23 OrderVector::OrderVector(string id, vector<int> ov) :
24 DataVector(id), data(ov)
29 /***********************************************************************/
31 OrderVector::OrderVector(ifstream& f) : DataVector() {
38 data.assign(hold, -1);
42 for(int i=0;i<hold;i++){
50 errorOut(e, "OrderVector", "OrderVector");
55 /***********************************************************************/
58 int OrderVector::getNumBins(){
59 if(needToUpdate == 1){ updateStats(); }
63 /***********************************************************************/
65 int OrderVector::getNumSeqs(){
66 if(needToUpdate == 1){ updateStats(); }
70 /***********************************************************************/
72 int OrderVector::getMaxRank(){
73 if(needToUpdate == 1){ updateStats(); }
77 /***********************************************************************/
81 void OrderVector::set(int index, int binNumber){
83 data[index] = binNumber;
88 /***********************************************************************/
90 int OrderVector::get(int index){
94 /***********************************************************************/
96 void OrderVector::push_back(int index){
98 data.push_back(index);
103 /***********************************************************************/
105 void OrderVector::print(ostream& output){
107 output << label << '\t' << numSeqs << '\t';
109 for(int i=0;i<data.size();i++){
110 output << data[i] << '\t';
114 catch(exception& e) {
115 errorOut(e, "OrderVector", "print");
120 /***********************************************************************/
122 void OrderVector::print(string prefix, ostream& output){
124 output << prefix << '\t' << numSeqs << '\t';
126 for(int i=0;i<numSeqs;i++){
127 output << data[i] << '\t';
131 catch(exception& e) {
132 errorOut(e, "OrderVector", "print");
137 /***********************************************************************/
139 void OrderVector::resize(int){
140 mothurOut("resize() did nothing in class OrderVector");
143 /***********************************************************************/
145 int OrderVector::size(){
149 /***********************************************************************/
151 vector<int>::iterator OrderVector::begin(){
155 /***********************************************************************/
157 vector<int>::iterator OrderVector::end(){
161 /***********************************************************************/
163 RAbundVector OrderVector::getRAbundVector(){
165 RAbundVector rav(data.size());
167 for(int i=0;i<numSeqs;i++){
168 rav.set(data[i], rav.get(data[i]) + 1);
170 sort(rav.rbegin(), rav.rend());
171 for(int i=numSeqs-1;i>=0;i--){
172 if(rav.get(i) == 0){ rav.pop_back(); }
181 catch(exception& e) {
182 errorOut(e, "OrderVector", "getRAbundVector");
187 /***********************************************************************/
189 SAbundVector OrderVector::getSAbundVector(){
191 RAbundVector rav(this->getRAbundVector());
192 return rav.getSAbundVector();
196 /***********************************************************************/
198 OrderVector OrderVector::getOrderVector(map<string,int>* hold = 0){
202 /***********************************************************************/
204 void OrderVector::updateStats(){
207 // int maxBinVectorLength = 0;
212 for(int i=0;i<data.size();i++){
218 vector<int> hold(numSeqs);
220 for(int i=0;i<numSeqs;i++){
222 hold[data[i]] = hold[data[i]]+1;
225 for(int i=0;i<numSeqs;i++){
226 if(hold[i] > 0) { numBins++; }
227 if(hold[i] > maxRank) { maxRank = hold[i]; }
230 catch(exception& e) {
231 errorOut(e, "OrderVector", "updateStats");
236 /***********************************************************************/