exit(1);
}
}
+//***************************************************************************************************************
+bool SensSpecCommand::testFile(){
+ try{
+ ifstream fileHandle;
+ m->openInputFile(phylipfile, fileHandle);
+
+ bool square = false;
+ string numTest, name;
+ fileHandle >> numTest >> name;
+
+ if (!m->isContainingOnlyDigits(numTest)) { m->mothurOut("[ERROR]: expected a number and got " + numTest + ", quitting."); m->mothurOutEndLine(); exit(1); }
+
+ char d;
+ while((d=fileHandle.get()) != EOF){
+ if(isalnum(d)){
+ square = true;
+ break;
+ }
+ if(d == '\n'){
+ square = false;
+ break;
+ }
+ }
+ fileHandle.close();
+
+ return square;
+ }
+ catch(exception& e) {
+ m->errorOut(e, "SensSpecCommand", "testFile");
+ exit(1);
+ }
+}
//***************************************************************************************************************
int SensSpecCommand::processPhylip(){
try{
//probably need some checking to confirm that the names in the distance matrix are the same as those in the list file
- string origCutoff = "";
+ square = testFile();
+ string origCutoff = "";
bool getCutoff = 0;
if(cutoff == -1.00) { getCutoff = 1; }
- else { origCutoff = toString(cutoff); cutoff += (0.49 / double(precision)); }
+ else { origCutoff = toString(cutoff); cutoff += (0.49 / double(precision)); }
map<string, int> seqMap;
string seqList;
set<string> processedLabels;
set<string> userLabels = labels;
-
while((list != NULL) && ((allLines == 1) || (userLabels.size() != 0))) {
if(m->control_pressed){
else { trueNegatives++; }
}
}
+
+ if (square) { m->getline(phylipFile); } //get rest of line - redundant distances
+ m->gobble(phylipFile);
}
phylipFile.close();
m->openInputFile(distFile, phylipFile);
string numTest;
int pNumSeqs;
- phylipFile >> numTest;
+ phylipFile >> numTest; m->gobble(phylipFile);
if (!m->isContainingOnlyDigits(numTest)) { m->mothurOut("[ERROR]: expected a number and got " + numTest + ", quitting."); m->mothurOutEndLine(); exit(1); }
else {
m->mothurConvert(numTest, pNumSeqs);
}
- phylipFile >> pNumSeqs; m->gobble(phylipFile);
string seqName;
- double distance;
-
for(int i=0;i<pNumSeqs;i++){
-
if (m->control_pressed) { return ""; }
-
- phylipFile >> seqName;
+ phylipFile >> seqName; m->getline(phylipFile); m->gobble(phylipFile);
uniqueNames.insert(seqName);
-
- for(int j=0;j<i;j++){
- phylipFile >> distance;
- }
- m->gobble(phylipFile);
}
phylipFile.close();
}else {
//make a new list vector
ListVector newList;
newList.setLabel(list.getLabel());
+ vector<string> binLabels = list.getLabels();
+ vector<string> newLabels;
//for each bin
for (int i = 0; i < list.getNumBins(); i++) {
m->splitAtComma(binnames, bnames);
string newNames = "";
- for (int i = 0; i < bnames.size(); i++) {
- string name = bnames[i];
+ for (int j = 0; j < bnames.size(); j++) {
+ string name = bnames[j];
//if that name is in the .accnos file, add it
if (uniqueNames.count(name) != 0) { newNames += name + ","; }
}
//if there are names in this bin add to new list
if (newNames != "") {
newNames = newNames.substr(0, newNames.length()-1); //rip off extra comma
- newList.push_back(newNames);
+ newList.push_back(newNames);
+ newLabels.push_back(binLabels[i]);
}
}
//print new listvector
if (newList.getNumBins() != 0) {
wroteSomething = true;
+ newList.setLabels(newLabels);
+ if (!m->printedListHeaders) { newList.printHeaders(out); }
newList.print(out);
}
out.close();
if (wroteSomething) { return newListFile; }
+ else { m->mothurRemove(newListFile); }
+
return "";
}
catch(exception& e) {