X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mgclustercommand.cpp;h=6eb9c7d72f99590ec22b2f4b8aa758057a7f24f2;hb=e189982e0a9b7352ad57cc38ccee675f128be22e;hp=bf0b82b3973edce4353325d3364010bdadd20c54;hpb=74844a60d80c6dd06e3fb02ee9b928424f9019b0;p=mothur.git diff --git a/mgclustercommand.cpp b/mgclustercommand.cpp index bf0b82b..6eb9c7d 100644 --- a/mgclustercommand.cpp +++ b/mgclustercommand.cpp @@ -164,6 +164,8 @@ int MGClusterCommand::execute(){ list = new ListVector(nameMap->getListVector()); RAbundVector* rabund = new RAbundVector(list->getRAbundVector()); + if (m->control_pressed) { delete nameMap; delete read; delete list; delete rabund; return 0; } + start = time(NULL); oldList = *list; @@ -176,6 +178,12 @@ int MGClusterCommand::execute(){ openOutputFile(fileroot+ tag + ".rabund", rabundFile); openOutputFile(fileroot+ tag + ".sabund", sabundFile); + if (m->control_pressed) { + delete nameMap; delete read; delete list; delete rabund; + listFile.close(); rabundFile.close(); sabundFile.close(); remove((fileroot+ tag + ".list").c_str()); remove((fileroot+ tag + ".rabund").c_str()); remove((fileroot+ tag + ".sabund").c_str()); + return 0; + } + if (!hclusterWanted) { //get distmatrix and overlap SparseMatrix* distMatrix = read->getDistMatrix(); @@ -188,10 +196,23 @@ int MGClusterCommand::execute(){ else if(method == "average"){ cluster = new AverageLinkage(rabund, list, distMatrix, cutoff, method); } cluster->setMapWanted(true); + if (m->control_pressed) { + delete nameMap; delete distMatrix; delete list; delete rabund; delete cluster; + listFile.close(); rabundFile.close(); sabundFile.close(); remove((fileroot+ tag + ".list").c_str()); remove((fileroot+ tag + ".rabund").c_str()); remove((fileroot+ tag + ".sabund").c_str()); + return 0; + } + //cluster using cluster classes while (distMatrix->getSmallDist() < cutoff && distMatrix->getNNodes() > 0){ cluster->update(cutoff); + + if (m->control_pressed) { + delete nameMap; delete distMatrix; delete list; delete rabund; delete cluster; + listFile.close(); rabundFile.close(); sabundFile.close(); remove((fileroot+ tag + ".list").c_str()); remove((fileroot+ tag + ".rabund").c_str()); remove((fileroot+ tag + ".sabund").c_str()); + return 0; + } + float dist = distMatrix->getSmallDist(); float rndDist = roundDist(dist, precision); @@ -203,6 +224,13 @@ int MGClusterCommand::execute(){ if (merge) { map seq2Bin = cluster->getSeqtoBin(); ListVector* temp = mergeOPFs(seq2Bin, rndPreviousDist); + + if (m->control_pressed) { + delete nameMap; delete distMatrix; delete list; delete rabund; delete cluster; delete temp; + listFile.close(); rabundFile.close(); sabundFile.close(); remove((fileroot+ tag + ".list").c_str()); remove((fileroot+ tag + ".rabund").c_str()); remove((fileroot+ tag + ".sabund").c_str()); + return 0; + } + temp->setLabel(toString(rndPreviousDist, precisionLength-1)); printData(temp); delete temp; @@ -225,6 +253,13 @@ int MGClusterCommand::execute(){ if (merge) { map seq2Bin = cluster->getSeqtoBin(); ListVector* temp = mergeOPFs(seq2Bin, rndPreviousDist); + + if (m->control_pressed) { + delete nameMap; delete distMatrix; delete list; delete rabund; delete cluster; delete temp; + listFile.close(); rabundFile.close(); sabundFile.close(); remove((fileroot+ tag + ".list").c_str()); remove((fileroot+ tag + ".rabund").c_str()); remove((fileroot+ tag + ".sabund").c_str()); + return 0; + } + temp->setLabel(toString(rndPreviousDist, precisionLength-1)); printData(temp); delete temp; @@ -247,6 +282,12 @@ int MGClusterCommand::execute(){ //sort the distance and overlap files sortHclusterFiles(distFile, overlapFile); + + if (m->control_pressed) { + delete nameMap; delete list; delete rabund; + listFile.close(); rabundFile.close(); sabundFile.close(); remove((fileroot+ tag + ".list").c_str()); remove((fileroot+ tag + ".rabund").c_str()); remove((fileroot+ tag + ".sabund").c_str()); + return 0; + } //create cluster hcluster = new HCluster(rabund, list, method, distFile, nameMap, cutoff); @@ -255,16 +296,38 @@ int MGClusterCommand::execute(){ vector seqs; seqs.resize(1); // to start loop //ifstream inHcluster; //openInputFile(distFile, inHcluster); + + if (m->control_pressed) { + delete nameMap; delete list; delete rabund; delete hcluster; + listFile.close(); rabundFile.close(); sabundFile.close(); remove((fileroot+ tag + ".list").c_str()); remove((fileroot+ tag + ".rabund").c_str()); remove((fileroot+ tag + ".sabund").c_str()); + return 0; + } while (seqs.size() != 0){ seqs = hcluster->getSeqs(); + if (m->control_pressed) { + delete nameMap; delete list; delete rabund; delete hcluster; + listFile.close(); rabundFile.close(); sabundFile.close(); remove((fileroot+ tag + ".list").c_str()); remove((fileroot+ tag + ".rabund").c_str()); remove((fileroot+ tag + ".sabund").c_str()); + remove(distFile.c_str()); + remove(overlapFile.c_str()); + return 0; + } + for (int i = 0; i < seqs.size(); i++) { //-1 means skip me if (seqs[i].seq1 != seqs[i].seq2) { hcluster->update(seqs[i].seq1, seqs[i].seq2, seqs[i].dist); + + if (m->control_pressed) { + delete nameMap; delete list; delete rabund; delete hcluster; + listFile.close(); rabundFile.close(); sabundFile.close(); remove((fileroot+ tag + ".list").c_str()); remove((fileroot+ tag + ".rabund").c_str()); remove((fileroot+ tag + ".sabund").c_str()); + remove(distFile.c_str()); + remove(overlapFile.c_str()); + return 0; + } float rndDist = roundDist(seqs[i].dist, precision); @@ -276,6 +339,15 @@ int MGClusterCommand::execute(){ if (merge) { map seq2Bin = hcluster->getSeqtoBin(); ListVector* temp = mergeOPFs(seq2Bin, rndPreviousDist); + + if (m->control_pressed) { + delete nameMap; delete list; delete rabund; delete hcluster; delete temp; + listFile.close(); rabundFile.close(); sabundFile.close(); remove((fileroot+ tag + ".list").c_str()); remove((fileroot+ tag + ".rabund").c_str()); remove((fileroot+ tag + ".sabund").c_str()); + remove(distFile.c_str()); + remove(overlapFile.c_str()); + return 0; + } + temp->setLabel(toString(rndPreviousDist, precisionLength-1)); printData(temp); delete temp; @@ -301,6 +373,15 @@ int MGClusterCommand::execute(){ if (merge) { map seq2Bin = hcluster->getSeqtoBin(); ListVector* temp = mergeOPFs(seq2Bin, rndPreviousDist); + + if (m->control_pressed) { + delete nameMap; delete list; delete rabund; delete hcluster; delete temp; + listFile.close(); rabundFile.close(); sabundFile.close(); remove((fileroot+ tag + ".list").c_str()); remove((fileroot+ tag + ".rabund").c_str()); remove((fileroot+ tag + ".sabund").c_str()); + remove(distFile.c_str()); + remove(overlapFile.c_str()); + return 0; + } + temp->setLabel(toString(rndPreviousDist, precisionLength-1)); printData(temp); delete temp; @@ -324,6 +405,14 @@ int MGClusterCommand::execute(){ globaldata->setListFile(fileroot+ tag + ".list"); globaldata->setFormat("list"); + if (m->control_pressed) { + delete nameMap; + listFile.close(); rabundFile.close(); sabundFile.close(); remove((fileroot+ tag + ".list").c_str()); remove((fileroot+ tag + ".rabund").c_str()); remove((fileroot+ tag + ".sabund").c_str()); + globaldata->setListFile(""); + globaldata->setFormat(""); + return 0; + } + m->mothurOutEndLine(); m->mothurOut("Output File Names: "); m->mothurOutEndLine(); m->mothurOut(fileroot+ tag + ".list"); m->mothurOutEndLine(); @@ -373,6 +462,10 @@ ListVector* MGClusterCommand::mergeOPFs(map binInfo, float dist){ }else { if (overlapMatrix.size() == 0) { done = true; } } while (!done) { + if (m->control_pressed) { + if (hclusterWanted) { inOverlap.close(); } + return newList; + } //get next overlap seqDist overlapNode; @@ -445,12 +538,12 @@ ListVector* MGClusterCommand::mergeOPFs(map binInfo, float dist){ void MGClusterCommand::sortHclusterFiles(string unsortedDist, string unsortedOverlap) { try { //sort distFile - string sortedDistFile = sortFile(unsortedDist); + string sortedDistFile = sortFile(unsortedDist, outputDir); remove(unsortedDist.c_str()); //delete unsorted file distFile = sortedDistFile; //sort overlap file - string sortedOverlapFile = sortFile(unsortedOverlap); + string sortedOverlapFile = sortFile(unsortedOverlap, outputDir); remove(unsortedOverlap.c_str()); //delete unsorted file overlapFile = sortedOverlapFile; }