]> git.donarmstrong.com Git - mothur.git/blobdiff - sharedsabundvector.cpp
Revert to previous commit
[mothur.git] / sharedsabundvector.cpp
diff --git a/sharedsabundvector.cpp b/sharedsabundvector.cpp
new file mode 100644 (file)
index 0000000..efd14bc
--- /dev/null
@@ -0,0 +1,275 @@
+/*
+ *  sharedSharedSAbundVector.cpp
+ *  Dotur
+ *
+ *  Created by Sarah Westcott on 12/10/08.
+ *  Copyright 2008 Schloss Lab UMASS Amherst. All rights reserved.
+ *
+ */
+
+#include "sharedsabundvector.h"
+#include "sabundvector.hpp"
+
+
+/***********************************************************************/
+
+SharedSAbundVector::SharedSAbundVector() : DataVector(), maxRank(0), numBins(0), numSeqs(0){  }
+
+/***********************************************************************/
+
+SharedSAbundVector::SharedSAbundVector(int size) :     DataVector(), maxRank(0), numBins(0), numSeqs(0) {
+               individual newGuy;
+               //initialize data
+               for (int i=0; i< size; i++) {
+                       newGuy.bin = i;
+                       newGuy.abundance = 0;
+                       data.push_back(newGuy);
+               }
+}
+
+/***********************************************************************/
+
+void SharedSAbundVector::set(int bin, int abundance, string groupName){
+       try {
+
+               int initSize = data[bin].abundance;
+               data[bin].abundance = abundance;
+               data[bin].group = groupName;
+       
+               if(bin != 0){
+                       numBins += (abundance - initSize);
+               }
+       
+               numSeqs += bin * (abundance - initSize);
+       
+               if(bin > maxRank)       {       maxRank = bin;          }
+       }
+       catch(exception& e) {
+               m->errorOut(e, "SharedSAbundVector", "set");
+               exit(1);
+       }
+}
+
+/***********************************************************************/
+
+individual SharedSAbundVector::get(int index){
+       return data[index];
+}
+/***********************************************************************/
+
+int SharedSAbundVector::getAbundance(int index){
+       return data[index].abundance;
+}
+
+/***********************************************************************/
+
+void SharedSAbundVector::push_back(int abundance, int bin, string groupName){
+       try {
+               individual newGuy;
+               newGuy.abundance = abundance;
+               newGuy.bin = bin;
+               newGuy.group = groupName;
+               
+               data.push_back(newGuy);
+       
+               maxRank++;      
+       
+               numBins += abundance;
+       
+               numSeqs += (maxRank * abundance);
+       }
+       catch(exception& e) {
+               m->errorOut(e, "SharedSAbundVector", "push_back");
+               exit(1);
+       }
+}
+
+/***********************************************************************/
+
+void SharedSAbundVector::resize(int size){
+       data.resize(size);
+}
+
+/***********************************************************************/
+
+int SharedSAbundVector::size(){
+       return data.size();             
+}
+
+/***********************************************************************/
+void SharedSAbundVector::print(ostream& output){
+       try {
+               output << label << '\t' << maxRank << '\t';
+       
+               for(int i=1;i<=maxRank;i++){
+                       output << data[i].abundance << '\t';
+               }
+               output << endl;
+       }
+       catch(exception& e) {
+               m->errorOut(e, "SharedSAbundVector", "print");
+               exit(1);
+       }
+}
+/***********************************************************************/
+string SharedSAbundVector::getGroup(){
+       return group;
+}
+
+/***********************************************************************/
+
+void SharedSAbundVector::setGroup(string groupName){
+       group = groupName;
+}
+
+/**********************************************************************/
+int SharedSAbundVector::getNumBins(){
+       return numBins;
+}
+
+/***********************************************************************/
+
+int SharedSAbundVector::getNumSeqs(){
+       return numSeqs;
+}
+
+/***********************************************************************/
+
+int SharedSAbundVector::getMaxRank(){
+       return maxRank;
+}
+/***********************************************************************/
+RAbundVector SharedSAbundVector::getRAbundVector(){
+       try {
+               RAbundVector rav;
+       
+               for(int i=1;i<data.size();i++){         
+                       for(int j=0;j<data[i].abundance;j++){
+                               rav.push_back(i);
+                       }
+               }
+               sort(rav.rbegin(), rav.rend());
+       
+               rav.setLabel(label);
+               return rav;
+       }
+       catch(exception& e) {
+               m->errorOut(e, "SharedSAbundVector", "getRAbundVector");
+               exit(1);
+       }
+}
+/***********************************************************************/
+SAbundVector SharedSAbundVector::getSAbundVector(){
+       try {
+               RAbundVector rav;
+               SAbundVector sav;
+               
+               rav = getRAbundVector();
+               sav = rav.getSAbundVector();
+               return sav;
+       
+       }
+       catch(exception& e) {
+               m->errorOut(e, "SharedSAbundVector", "getSAbundVector");
+               exit(1);
+       }
+}
+
+/***********************************************************************/
+
+bool compareMembers (individual member, individual member2){
+
+  if(member.abundance < member2.abundance){
+    return true;   }   
+  else{
+       return false; 
+  }
+}
+
+/***********************************************************************/
+SharedRAbundVector SharedSAbundVector::getSharedRAbundVector(){
+       try {
+               SharedRAbundVector rav;
+               
+               for(int i=1;i<data.size();i++){         
+                       for(int j=0;j<data[i].abundance;j++){
+                               rav.push_back(i, data[i].group);
+                       }
+               }
+               sort(rav.rbegin(), rav.rend(), compareMembers);
+       
+               rav.setLabel(label);
+               rav.setGroup(group);
+               
+               return rav;
+       }
+       catch(exception& e) {
+               m->errorOut(e, "SharedSAbundVector", "getSharedRAbundVector");
+               exit(1);
+       }
+}
+
+
+/***********************************************************************/
+
+SharedSAbundVector SharedSAbundVector::getSharedSAbundVector(){
+       return *this;                   
+}
+
+/***********************************************************************/
+SharedOrderVector SharedSAbundVector::getSharedOrderVector() {
+       try {
+               SharedRAbundVector rav;
+               SharedOrderVector ov;
+               
+               rav = this->getSharedRAbundVector();
+               ov = rav.getSharedOrderVector();
+               
+               ov.updateStats();
+               
+               return ov;
+       }
+       catch(exception& e) {
+               m->errorOut(e, "SharedSAbundVector", "getSharedOrderVector");
+               exit(1);
+       }
+}
+/***********************************************************************/
+
+void SharedSAbundVector::clear(){
+       numBins = 0;
+       maxRank = 0;
+       numSeqs = 0;
+       data.clear();
+}
+
+/***********************************************************************/
+OrderVector SharedSAbundVector::getOrderVector(map<string,int>* hold = NULL){
+       try {
+               OrderVector ov;
+       
+               int binIndex = 0;
+       
+               for(int i=1;i<data.size();i++){
+                       for(int j=0;j<data[i].abundance;j++){
+                               for(int k=0;k<i;k++){
+                                       ov.push_back(binIndex);
+                               }
+                               binIndex++;
+                       }
+               }
+       
+               random_shuffle(ov.begin(), ov.end());
+
+               ov.setLabel(label);
+               ov.getNumBins();
+               return ov;
+       }
+       catch(exception& e) {
+               m->errorOut(e, "SharedSAbundVector", "getOrderVector");
+               exit(1);
+       }
+}
+
+/***********************************************************************/
+