+//**********************************************************************************************************************
+void SharedCommand::eliminateZeroOTUS(vector<SharedRAbundVector*>& thislookup) {
+ try {
+
+ vector<SharedRAbundVector*> newLookup;
+ for (int i = 0; i < thislookup.size(); i++) {
+ SharedRAbundVector* temp = new SharedRAbundVector();
+ temp->setLabel(thislookup[i]->getLabel());
+ temp->setGroup(thislookup[i]->getGroup());
+ newLookup.push_back(temp);
+ }
+
+ //for each bin
+ for (int i = 0; i < thislookup[0]->getNumBins(); i++) {
+
+ //look at each sharedRabund and make sure they are not all zero
+ bool allZero = true;
+ for (int j = 0; j < thislookup.size(); j++) {
+ if (thislookup[j]->getAbundance(i) != 0) { allZero = false; break; }
+ }
+
+ //if they are not all zero add this bin
+ if (!allZero) {
+ for (int j = 0; j < thislookup.size(); j++) {
+ newLookup[j]->push_back(thislookup[j]->getAbundance(i), thislookup[j]->getGroup());
+ }
+ }
+ //else{ cout << "bin # " << i << " is all zeros" << endl; }
+ }
+
+ for (int j = 0; j < thislookup.size(); j++) { delete thislookup[j]; }
+ thislookup = newLookup;
+
+
+ }
+ catch(exception& e) {
+ errorOut(e, "SharedCommand", "eliminateZeroOTUS");
+ exit(1);
+ }
+}
+//**********************************************************************************************************************
+void SharedCommand::createMisMatchFile() {
+ try {
+ ofstream outMisMatch;
+ string outputMisMatchName = outputDir + getRootName(getSimpleName(globaldata->inputFileName));
+
+ //you have sequences in your list file that are not in your group file
+ if (SharedList->getNumSeqs() > groupMap->getNumSeqs()) {
+ outputMisMatchName += "missing.group";
+ mothurOut("For a list of names that are in your list file and not in your group file, please refer to " + outputMisMatchName + "."); mothurOutEndLine();
+
+ openOutputFile(outputMisMatchName, outMisMatch);
+
+ map<string, string> listNames;
+ map<string, string>::iterator itList;
+
+ //go through list and if group returns "not found" output it
+ for (int i = 0; i < SharedList->getNumBins(); i++) {
+
+ string names = SharedList->get(i);
+
+ while (names.find_first_of(',') != -1) {
+ string name = names.substr(0,names.find_first_of(','));
+ names = names.substr(names.find_first_of(',')+1, names.length());
+ string group = groupMap->getGroup(name);
+
+ if(group == "not found") { outMisMatch << name << endl; }
+
+ itList = listNames.find(name);
+ if (itList != listNames.end()) { mothurOut(name + " is in your list file more than once. Sequence names must be unique. please correct."); mothurOutEndLine(); }
+ else { listNames[name] = name; }
+ }
+
+ //get last name
+ string group = groupMap->getGroup(names);
+ if(group == "not found") { outMisMatch << names << endl; }
+
+ itList = listNames.find(names);
+ if (itList != listNames.end()) { mothurOut(names + " is in your list file more than once. Sequence names must be unique. please correct."); mothurOutEndLine(); }
+ else { listNames[names] = names; }
+
+ }
+
+ outMisMatch.close();
+
+
+ }else {//you have sequences in your group file that are not in you list file
+
+ outputMisMatchName += "missing.name";
+ mothurOut("For a list of names that are in your group file and not in your list file, please refer to " + outputMisMatchName + "."); mothurOutEndLine();
+
+ map<string, string> namesInList;
+ map<string, string>::iterator itList;
+
+ //go through listfile and get names
+ for (int i = 0; i < SharedList->getNumBins(); i++) {
+
+ string names = SharedList->get(i);
+
+ while (names.find_first_of(',') != -1) {
+ string name = names.substr(0,names.find_first_of(','));
+ names = names.substr(names.find_first_of(',')+1, names.length());
+
+ itList = namesInList.find(name);
+ if (itList != namesInList.end()) { mothurOut(name + " is in your list file more than once. Sequence names must be unique. please correct."); mothurOutEndLine(); }
+
+ namesInList[name] = name;
+
+ }
+
+ itList = namesInList.find(names);
+ if (itList != namesInList.end()) { mothurOut(names + " is in your list file more than once. Sequence names must be unique. please correct."); mothurOutEndLine(); }
+
+ //get last name
+ namesInList[names] = names;
+ }
+
+ //get names of sequences in groupfile
+ vector<string> seqNames = groupMap->getNamesSeqs();
+
+ map<string, string>::iterator itMatch;
+
+ openOutputFile(outputMisMatchName, outMisMatch);
+
+ //loop through names in seqNames and if they aren't in namesIn list output them
+ for (int i = 0; i < seqNames.size(); i++) {
+
+ itMatch = namesInList.find(seqNames[i]);
+
+ if (itMatch == namesInList.end()) {
+
+ outMisMatch << seqNames[i] << endl;
+ }
+ }
+ outMisMatch.close();
+ }
+
+ }
+ catch(exception& e) {
+ errorOut(e, "SharedCommand", "createMisMatchFile");
+ exit(1);
+ }
+}