X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=readcolumn.cpp;h=53a8c4263dddc4687acc5a64cf7c5b1d27aac647;hb=36a6b02cf7f09d2bc34376b588944a9ca73429c5;hp=29c967e0cbed51e375d21e0e755f14b7d1c7bd0d;hpb=510b1cfc25cd79391d6973ca20c5ec25fb1bb3b2;p=mothur.git diff --git a/readcolumn.cpp b/readcolumn.cpp index 29c967e..53a8c42 100644 --- a/readcolumn.cpp +++ b/readcolumn.cpp @@ -14,13 +14,21 @@ ReadColumnMatrix::ReadColumnMatrix(string df) : distFile(df){ - successOpen = openInputFile(distFile, fileHandle); + successOpen = m->openInputFile(distFile, fileHandle); + sim = false; } +/***********************************************************************/ + +ReadColumnMatrix::ReadColumnMatrix(string df, bool s) : distFile(df){ + + successOpen = m->openInputFile(distFile, fileHandle); + sim = s; +} /***********************************************************************/ -void ReadColumnMatrix::read(NameAssignment* nameMap){ +int ReadColumnMatrix::read(NameAssignment* nameMap){ try { string firstName, secondName; @@ -38,20 +46,20 @@ void ReadColumnMatrix::read(NameAssignment* nameMap){ //need to see if this is a square or a triangular matrix... while(fileHandle && lt == 1){ //let's assume it's a triangular matrix... + fileHandle >> firstName >> secondName >> distance; // get the row and column names and distance + + if (m->control_pressed) { fileHandle.close(); delete reading; return 0; } map::iterator itA = nameMap->find(firstName); map::iterator itB = nameMap->find(secondName); - - if(itA == nameMap->end()){ - cerr << "AAError: Sequence '" << firstName << "' was not found in the names file, please correct\n"; - } - if(itB == nameMap->end()){ - cerr << "ABError: Sequence '" << secondName << "' was not found in the names file, please correct\n"; - } + + if(itA == nameMap->end()){ m->mothurOut("AAError: Sequence '" + firstName + "' was not found in the names file, please correct\n"); exit(1); } + if(itB == nameMap->end()){ m->mothurOut("ABError: Sequence '" + secondName + "' was not found in the names file, please correct\n"); exit(1); } if (distance == -1) { distance = 1000000; } + else if (sim) { distance = 1.0 - distance; } //user has entered a sim matrix that we need to convert. if(distance < cutoff && itA != itB){ if(itA->second > itB->second){ @@ -86,29 +94,29 @@ void ReadColumnMatrix::read(NameAssignment* nameMap){ } reading->update(itA->second * nseqs); } - gobble(fileHandle); + m->gobble(fileHandle); } if(lt == 0){ // oops, it was square + fileHandle.close(); //let's start over D->clear(); //let's start over - openInputFile(distFile, fileHandle); //let's start over + m->openInputFile(distFile, fileHandle); //let's start over while(fileHandle){ fileHandle >> firstName >> secondName >> distance; + + if (m->control_pressed) { fileHandle.close(); delete reading; return 0; } map::iterator itA = nameMap->find(firstName); map::iterator itB = nameMap->find(secondName); - if(itA == nameMap->end()){ - cerr << "BError: Sequence '" << firstName << "' was not found in the names file, please correct\n"; - } - if(itB == nameMap->end()){ - cerr << "BError: Sequence '" << secondName << "' was not found in the names file, please correct\n"; - } + if(itA == nameMap->end()){ m->mothurOut("AAError: Sequence '" + firstName + "' was not found in the names file, please correct\n"); exit(1); } + if(itB == nameMap->end()){ m->mothurOut("ABError: Sequence '" + secondName + "' was not found in the names file, please correct\n"); exit(1); } if (distance == -1) { distance = 1000000; } + else if (sim) { distance = 1.0 - distance; } //user has entered a sim matrix that we need to convert. if(distance < cutoff && itA->second > itB->second){ PCell value(itA->second, itB->second, distance); @@ -116,18 +124,22 @@ void ReadColumnMatrix::read(NameAssignment* nameMap){ reading->update(itA->second * nseqs); } - gobble(fileHandle); + m->gobble(fileHandle); } } - + + if (m->control_pressed) { fileHandle.close(); delete reading; return 0; } + reading->finish(); fileHandle.close(); list->setLabel("0"); + + return 1; } catch(exception& e) { - errorOut(e, "ReadColumnMatrix", "read"); + m->errorOut(e, "ReadColumnMatrix", "read"); exit(1); } }