X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=sffinfocommand.cpp;h=f267ba4b7859ed091f749456cb5495799ffc9ec0;hb=d205e70ae86dbee2efc2df02f2717975854de6ba;hp=e008ce47d2153530af1c0ab09a585a94d4963662;hpb=fc3b1fc4fc1c4e38fde6b0c0ee7896b5fe0b9d57;p=mothur.git diff --git a/sffinfocommand.cpp b/sffinfocommand.cpp index e008ce4..f267ba4 100644 --- a/sffinfocommand.cpp +++ b/sffinfocommand.cpp @@ -298,7 +298,6 @@ SffInfoCommand::SffInfoCommand(string option) { //********************************************************************************************************************** int SffInfoCommand::execute(){ try { - if (abort == true) { if (calledHelp) { return 0; } return 2; } for (int s = 0; s < filenames.size(); s++) { @@ -307,6 +306,7 @@ int SffInfoCommand::execute(){ int start = time(NULL); + filenames[s] = m->getFullPathName(filenames[s]); m->mothurOut("Extracting info from " + filenames[s] + " ..." ); m->mothurOutEndLine(); string accnos = ""; @@ -362,6 +362,9 @@ int SffInfoCommand::extractSffInfo(string input, string accnos){ ofstream outSfftxt, outFasta, outQual, outFlow; string outFastaFileName, outQualFileName; + string rootName = outputDir + m->getRootName(m->getSimpleName(input)); + if(rootName.find_last_of(".") == rootName.npos){ rootName += "."; } + string sfftxtFileName = outputDir + m->getRootName(m->getSimpleName(input)) + "sff.txt"; string outFlowFileName = outputDir + m->getRootName(m->getSimpleName(input)) + "flow"; if (trim) { @@ -406,7 +409,9 @@ int SffInfoCommand::extractSffInfo(string input, string accnos){ //read data seqRead read; readSeqData(in, read, header.numFlowsPerRead, readheader.numBases); - + bool okay = sanityCheck(readheader, read); + if (!okay) { break; } + //if you have provided an accosfile and this seq is not in it, then dont print if (seqNames.size() != 0) { if (seqNames.count(readheader.name) == 0) { print = false; } } @@ -609,7 +614,7 @@ int SffInfoCommand::readSeqData(ifstream& in, seqRead& read, int numFlowReads, i in.read(buffer, 2); read.flowgram[i] = be_int2(*(unsigned short *)(&buffer)); } - + //read flowIndex read.flowIndex.resize(numBases); for (int i = 0; i < numBases; i++) { @@ -741,11 +746,39 @@ int SffInfoCommand::printHeader(ofstream& out, Header& header) { exit(1); } } - +//********************************************************************************************************************** +bool SffInfoCommand::sanityCheck(Header& header, seqRead& read) { + try { + bool okay = true; + string message = "[WARNING]: Your sff file may be corrupted! Sequence: " + header.name + "\n"; + + if (header.clipQualLeft > read.bases.length()) { + okay = false; message += "Clip Qual Left = " + toString(header.clipQualLeft) + ", but we only read " + toString(read.bases.length()) + " bases.\n"; + } + if (header.clipQualRight > read.bases.length()) { + okay = false; message += "Clip Qual Right = " + toString(header.clipQualRight) + ", but we only read " + toString(read.bases.length()) + " bases.\n"; + } + if (header.clipQualLeft > read.qualScores.size()) { + okay = false; message += "Clip Qual Left = " + toString(header.clipQualLeft) + ", but we only read " + toString(read.qualScores.size()) + " quality scores.\n"; + } + if (header.clipQualRight > read.qualScores.size()) { + okay = false; message += "Clip Qual Right = " + toString(header.clipQualRight) + ", but we only read " + toString(read.qualScores.size()) + " quality scores.\n"; + } + + if (okay == false) { + m->mothurOut(message); m->mothurOutEndLine(); + } + + return okay; + } + catch(exception& e) { + m->errorOut(e, "SffInfoCommand", "sanityCheck"); + exit(1); + } +} //********************************************************************************************************************** int SffInfoCommand::printSffTxtSeqData(ofstream& out, seqRead& read, Header& header) { try { - out << "Flowgram: "; for (int i = 0; i < read.flowgram.size(); i++) { out << setprecision(2) << (read.flowgram[i]/(float)100) << '\t'; } @@ -775,10 +808,9 @@ int SffInfoCommand::printSffTxtSeqData(ofstream& out, seqRead& read, Header& hea //********************************************************************************************************************** int SffInfoCommand::printFastaSeqData(ofstream& out, seqRead& read, Header& header) { try { - string seq = read.bases; - if (trim) { + if (trim) { if(header.clipQualRight < header.clipQualLeft){ seq = "NNNN"; }