5 * Created by Sarah Westcott on 11/18/08.
6 * Copyright 2008 Schloss Lab UMASS Amherst. All rights reserved.
12 /***********************************************************************/
14 int Collect::getCurve(float percentFreq = 0.01){
16 RAbundVector* lookup = new RAbundVector(order->getNumBins());
17 SAbundVector* rank = new SAbundVector(order->getMaxRank()+1);
19 CollectorsCurveData* ccd = new CollectorsCurveData();
21 for(int i=0;i<displays.size();i++){
22 ccd->registerDisplay(displays[i]); //adds a display[i] to cdd
23 displays[i]->init(label); //sets displays label
26 //convert freq percentage to number
28 if (percentFreq < 1.0) { increment = numSeqs * percentFreq; }
29 else { increment = percentFreq; }
31 for(int i=0;i<numSeqs;i++){
33 if (m->control_pressed) { delete lookup; delete rank; delete ccd; return 1; }
35 int binNumber = order->get(i);
36 int abundance = lookup->get(binNumber);
38 rank->set(abundance, rank->get(abundance)-1);
42 lookup->set(binNumber, abundance);
43 rank->set(abundance, rank->get(abundance)+1); //increment rank(abundance)
45 if((i == 0) || (i+1) % increment == 0){
46 ccd->updateRankData(rank);
50 if(numSeqs % increment != 0){
51 ccd->updateRankData(rank);
54 for(int i=0;i<displays.size();i++){
65 m->errorOut(e, "Collect", "getCurve");
70 /***********************************************************************/
71 int Collect::getSharedCurve(float percentFreq = 0.01){
73 vector<SharedRAbundVector*> lookup;
74 vector<SharedRAbundVector*> subset;
76 //create and initialize vector of sharedvectors, one for each group
77 vector<string> mGroups = m->getGroups();
78 for (int i = 0; i < mGroups.size(); i++) {
79 SharedRAbundVector* temp = new SharedRAbundVector(sharedorder->getNumBins());
80 temp->setLabel(sharedorder->getLabel());
81 temp->setGroup(mGroups[i]);
82 lookup.push_back(temp);
85 SharedCollectorsCurveData* ccd = new SharedCollectorsCurveData();
87 //initialize labels for output
88 //makes 'uniqueAB uniqueAC uniqueBC' if your groups are A, B, C
91 for(int i=0;i<displays.size();i++){
92 ccd->registerDisplay(displays[i]); //adds a display[i] to cdd
93 bool hasLciHci = displays[i]->hasLciHci();
95 for (int s = 0; s < groupComb.size(); s++) {
96 if (hasLciHci) { groupLabel = groupLabel + label + groupComb[s] + "\t" + label + groupComb[s] + "lci\t" + label + groupComb[s] + "hci\t"; }
97 else{ groupLabel = groupLabel + label + groupComb[s] + "\t"; }
100 string groupLabelAll = groupLabel + label + "all\t";
101 if ((displays[i]->isCalcMultiple() == true) && (displays[i]->getAll() == true)) { displays[i]->init(groupLabelAll); }
102 else { displays[i]->init(groupLabel); }
105 //convert freq percentage to number
107 if (percentFreq < 1.0) { increment = numSeqs * percentFreq; }
108 else { increment = percentFreq; }
110 //sample all the members
111 for(int i=0;i<numSeqs;i++){
113 if (m->control_pressed) { for (int j = 0; j < lookup.size(); j++) { delete lookup[j]; } delete ccd; return 1; }
116 individual chosen = sharedorder->get(i);
119 //set info for sharedvector in chosens group
120 for (int j = 0; j < lookup.size(); j++) {
121 if (chosen.group == lookup[j]->getGroup()) {
122 abundance = lookup[j]->getAbundance(chosen.bin);
123 lookup[j]->set(chosen.bin, (abundance + 1), chosen.group);
128 //calculate at 0 and the given increment
129 if((i == 0) || (i+1) % increment == 0){
131 //how many comparisons to make i.e. for group a, b, c = ab, ac, bc.
135 for (int k = 0; k < (lookup.size() - 1); k++) { // pass cdd each set of groups to commpare
136 for (int l = n; l < lookup.size(); l++) {
137 subset.clear(); //clear out old pair of sharedrabunds
138 //add new pair of sharedrabund vectors
139 subset.push_back(lookup[k]); subset.push_back(lookup[l]);
141 //load subset with rest of lookup for those calcs that need everyone to calc for a pair
142 for (int w = 0; w < lookup.size(); w++) {
143 if ((w != k) && (w != l)) { subset.push_back(lookup[w]); }
146 ccd->updateSharedData(subset, i+1, m->getNumGroups(), pair);
151 //if this is a calculator that can do multiples then do them
153 ccd->updateSharedData(lookup, i+1, m->getNumGroups(), pair);
159 //calculate last label if you haven't already
160 if(numSeqs % increment != 0){
161 //how many comparisons to make i.e. for group a, b, c = ab, ac, bc.
164 for (int k = 0; k < (lookup.size() - 1); k++) { // pass cdd each set of groups to commpare
165 for (int l = n; l < lookup.size(); l++) {
166 subset.clear(); //clear out old pair of sharedrabunds
167 //add new pair of sharedrabund vectors
168 subset.push_back(lookup[k]); subset.push_back(lookup[l]);
170 //load subset with rest of lookup for those calcs that need everyone to calc for a pair
171 for (int w = 0; w < lookup.size(); w++) {
172 if ((w != k) && (w != l)) { subset.push_back(lookup[w]); }
175 ccd->updateSharedData(subset, totalNumSeq, m->getNumGroups(), pair);
179 //if this is a calculator that can do multiples then do them
181 ccd->updateSharedData(lookup, totalNumSeq, m->getNumGroups(), pair);
184 //resets output files
185 for(int i=0;i<displays.size();i++){
186 displays[i]->reset();
191 for (int i = 0; i < lookup.size(); i++) {
198 catch(exception& e) {
199 m->errorOut(e, "Collect", "getSharedCurve");
204 /**************************************************************************************/
206 void Collect::getGroupComb() {
212 vector<string> mGroups = m->getGroups();
213 for (int i = 0; i < (m->getNumGroups() - 1); i++) {
214 for (int l = n; l < m->getNumGroups(); l++) {
215 group = mGroups[i] + mGroups[l];
216 groupComb.push_back(group);
224 /**************************************************************************************/