5 * Created by Sarah Westcott on 11/18/08.
6 * Copyright 2008 Schloss Lab UMASS Amherst. All rights reserved.
11 #include "ordervector.hpp"
13 /***********************************************************************/
15 void Rarefact::getCurve(int increment = 1, int nIters = 1000){
17 RarefactionCurveData* rcd = new RarefactionCurveData();
18 for(int i=0;i<displays.size();i++){
19 rcd->registerDisplay(displays[i]);
22 for(int iter=0;iter<nIters;iter++){
24 for(int i=0;i<displays.size();i++){
25 displays[i]->init(label);
28 RAbundVector* lookup = new RAbundVector(order->getNumBins());
29 SAbundVector* rank = new SAbundVector(order->getMaxRank()+1);
30 random_shuffle(order->begin(), order->end());
32 for(int i=0;i<numSeqs;i++){
34 int binNumber = order->get(i);
35 int abundance = lookup->get(binNumber);
37 rank->set(abundance, rank->get(abundance)-1);
40 lookup->set(binNumber, abundance);
41 rank->set(abundance, rank->get(abundance)+1);
43 if((i == 0) || (i+1) % increment == 0){
44 rcd->updateRankData(rank);
48 if(numSeqs % increment != 0){
49 rcd->updateRankData(rank);
52 for(int i=0;i<displays.size();i++){
57 for(int i=0;i<displays.size();i++){
62 cout << "Standard Error: " << e.what() << " has occurred in the Rarefact class Function getCurve. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
66 cout << "An unknown error has occurred in the Rarefact class function getCurve. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
71 /***********************************************************************/
73 void Rarefact::getSharedCurve(int increment = 1, int nIters = 1000){
75 globaldata = GlobalData::getInstance();
76 SharedRarefactionCurveData* rcd = new SharedRarefactionCurveData();
78 //register the displays
79 for(int i=0;i<displays.size();i++){
80 rcd->registerDisplay(displays[i]);
83 for(int iter=0;iter<nIters;iter++){
84 //clear out old values for new iter
87 //create and initialize vector of sharedvectors, one for each group
88 for (int i = 0; i < globaldata->Groups.size(); i++) {
89 SharedRAbundVector* temp = new SharedRAbundVector(sharedorder->getNumBins());
90 temp->setLabel(sharedorder->getLabel());
91 temp->setGroup(globaldata->Groups[i]);
92 lookup.push_back(temp);
95 for(int i=0;i<displays.size();i++){
96 displays[i]->init(label);
99 //sample all the members
100 for(int i=0;i<numSeqs;i++){
102 individual chosen = sharedorder->get(i);
105 //set info for sharedvector in chosens group
106 for (int j = 0; j < lookup.size(); j++) {
107 if (chosen.group == lookup[j]->getGroup()) {
108 abundance = lookup[j]->getAbundance(chosen.bin);
109 lookup[j]->set(chosen.bin, (abundance + 1), chosen.group);
115 //randomize the groups
116 random_shuffle(lookup.begin(), lookup.end());
118 //send each group one at a time
119 for (int k = 0; k < lookup.size(); k++) {
120 rcd->updateSharedData(lookup[0], lookup[k], k+1, numGroupComb);
121 mergeVectors(lookup[0], lookup[k]);
124 //resets output files
125 for(int i=0;i<displays.size();i++){
126 displays[i]->reset();
130 for(int i=0;i<displays.size();i++){
131 displays[i]->close();
135 catch(exception& e) {
136 cout << "Standard Error: " << e.what() << " has occurred in the Rarefact class Function getSharedCurve. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
140 cout << "An unknown error has occurred in the Rarefact class function getSharedCurve. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
146 /**************************************************************************************/
147 void Rarefact::mergeVectors(SharedRAbundVector* shared1, SharedRAbundVector* shared2) {
149 for (int k = 0; k < shared1->size(); k++) {
150 //merge new species into shared1
151 if ((shared1->getAbundance(k) == 0) && (shared2->getAbundance(k) != 0)) {
152 shared1->set(k, shared2->getAbundance(k), "combo"); //set to 'combo' since this vector now contains multiple groups
156 catch(exception& e) {
157 cout << "Standard Error: " << e.what() << " has occurred in the Rarefact class Function mergeVectors. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
161 cout << "An unknown error has occurred in the Rarefact class function mergeVectors. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";