X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=chimeracheckrdp.cpp;h=42b531282c5f020664277a9e907699a3bf227658;hp=51a3d9bbac0eaea545e1626682049db382a973ac;hb=1a20e24ee786195ab0e1cccd4f5aede7a88f3f4e;hpb=fdc1f6eaf544f695fc1511f24bddd7e6069c33ba diff --git a/chimeracheckrdp.cpp b/chimeracheckrdp.cpp index 51a3d9b..42b5312 100644 --- a/chimeracheckrdp.cpp +++ b/chimeracheckrdp.cpp @@ -20,7 +20,7 @@ ChimeraCheckRDP::ChimeraCheckRDP(string filename, string temp, string n, bool s, kmerSize = k; outputDir = o; - templateDB = new AlignmentDB(templateFileName, "kmer", kmerSize, 0.0,0.0,0.0,0.0); + templateDB = new AlignmentDB(templateFileName, "kmer", kmerSize, 0.0,0.0,0.0,0.0, rand()); m->mothurOutEndLine(); kmer = new Kmer(kmerSize); @@ -47,7 +47,7 @@ ChimeraCheckRDP::~ChimeraCheckRDP() { } } //*************************************************************************************************************** -int ChimeraCheckRDP::print(ostream& out, ostream& outAcc) { +Sequence ChimeraCheckRDP::print(ostream& out, ostream& outAcc) { try { m->mothurOut("Processing: " + querySeq->getName()); m->mothurOutEndLine(); @@ -72,7 +72,7 @@ int ChimeraCheckRDP::print(ostream& out, ostream& outAcc) { } } - return 0; + return *querySeq; } catch(exception& e) { m->errorOut(e, "ChimeraCheckRDP", "print"); @@ -81,7 +81,7 @@ int ChimeraCheckRDP::print(ostream& out, ostream& outAcc) { } #ifdef USE_MPI //*************************************************************************************************************** -int ChimeraCheckRDP::print(MPI_File& out, MPI_File& outAcc) { +Sequence ChimeraCheckRDP::print(MPI_File& out, MPI_File& outAcc) { try { cout << "Processing: " << querySeq->getName() << endl; @@ -97,11 +97,12 @@ int ChimeraCheckRDP::print(MPI_File& out, MPI_File& outAcc) { MPI_Status status; int length = outString.length(); - char buf[length]; - strcpy(buf, outString.c_str()); + char* buf = new char[length]; + memcpy(buf, outString.c_str(), length); MPI_File_write_shared(out, buf, length, MPI_CHAR, &status); - + delete buf; + if (svg) { if (name != "") { //if user has specific names map::iterator it = names.find(querySeq->getName()); @@ -114,7 +115,7 @@ int ChimeraCheckRDP::print(MPI_File& out, MPI_File& outAcc) { } } - return 0; + return *querySeq; } catch(exception& e) { m->errorOut(e, "ChimeraCheckRDP", "print"); @@ -261,22 +262,28 @@ void ChimeraCheckRDP::readName(string namefile) { MPI_File inMPI; MPI_Offset size; MPI_Status status; + + //char* inFileName = new char[namefile.length()]; + //memcpy(inFileName, namefile.c_str(), namefile.length()); - char inFileName[namefile.length()]; + char inFileName[1024]; strcpy(inFileName, namefile.c_str()); MPI_File_open(MPI_COMM_WORLD, inFileName, MPI_MODE_RDONLY, MPI_INFO_NULL, &inMPI); MPI_File_get_size(inMPI, &size); - char buffer[size]; + //delete inFileName; + + char* buffer = new char[size]; MPI_File_read(inMPI, buffer, size, MPI_CHAR, &status); string tempBuf = buffer; if (tempBuf.length() > size) { tempBuf = tempBuf.substr(0, size); } istringstream iss (tempBuf,istringstream::in); + delete buffer; while(!iss.eof()) { - iss >> name; gobble(iss); + iss >> name; m->gobble(iss); names[name] = name; } @@ -285,10 +292,10 @@ void ChimeraCheckRDP::readName(string namefile) { #else ifstream in; - openInputFile(namefile, in); + m->openInputFile(namefile, in); while (!in.eof()) { - in >> name; gobble(in); + in >> name; m->gobble(in); names[name] = name; } in.close(); @@ -308,25 +315,26 @@ int ChimeraCheckRDP::calcKmers(map query, map subject) { try{ int common = 0; - map::iterator small; - map::iterator large; + map::iterator smallone; + map::iterator largeone; + if (query.size() < subject.size()) { - for (small = query.begin(); small != query.end(); small++) { - large = subject.find(small->first); + for (smallone = query.begin(); smallone != query.end(); smallone++) { + largeone = subject.find(smallone->first); //if you found it they have that kmer in common - if (large != subject.end()) { common++; } + if (largeone != subject.end()) { common++; } } }else { - for (small = subject.begin(); small != subject.end(); small++) { - large = query.find(small->first); + for (smallone = subject.begin(); smallone != subject.end(); smallone++) { + largeone = query.find(smallone->first); //if you found it they have that kmer in common - if (large != query.end()) { common++; } + if (largeone != query.end()) { common++; } } } @@ -347,12 +355,17 @@ void ChimeraCheckRDP::makeSVGpic(vector info) { MPI_File outSVG; int outMode=MPI_MODE_CREATE|MPI_MODE_WRONLY; + + //char* FileName = new char[file.length()]; + //memcpy(FileName, file.c_str(), file.length()); - char FileName[file.length()]; + char FileName[1024]; strcpy(FileName, file.c_str()); - + MPI_File_open(MPI_COMM_SELF, FileName, outMode, MPI_INFO_NULL, &outSVG); //comm, filename, mode, info, filepointer + //delete FileName; + int width = (info.size()*5) + 150; string outString = ""; @@ -398,10 +411,11 @@ void ChimeraCheckRDP::makeSVGpic(vector info) { MPI_Status status; int length = outString.length(); - char buf2[length]; - strcpy(buf2, outString.c_str()); + char* buf2 = new char[length]; + memcpy(buf2, outString.c_str(), length); MPI_File_write(outSVG, buf2, length, MPI_CHAR, &status); + delete buf2; MPI_File_close(&outSVG); @@ -418,7 +432,7 @@ void ChimeraCheckRDP::makeSVGpic(vector info) { string file = outputDir + querySeq->getName() + ".chimeracheck.svg"; ofstream outsvg; - openOutputFile(file, outsvg); + m->openOutputFile(file, outsvg); int width = (info.size()*5) + 150;