X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=sffinfocommand.h;h=12f0180db565edf8818455648eadcc19107ec5ab;hp=6e9d87c30d0898e0b6027bb5d3e4a22bfaa388bd;hb=b206f634aae1b4ce13978d203247fb64757d5482;hpb=df1ea5f2151b9334c471bf4310f78f51bba098be diff --git a/sffinfocommand.h b/sffinfocommand.h index 6e9d87c..12f0180 100644 --- a/sffinfocommand.h +++ b/sffinfocommand.h @@ -11,66 +11,71 @@ */ #include "command.hpp" +#include "groupmap.h" -#define SFF_MAGIC 0x2e736666 /* ".sff" */ -#define SFF_VERSION "\0\0\0\1" - -/**********************************************************/ -struct CommonHeader { - unsigned int magicNumber; - char* version; - unsigned long int indexOffset; - unsigned int indexLength; - unsigned int numReads; - unsigned short headerLength; - unsigned short keyLength; - unsigned short numFlowsPerRead; - char flogramFormatCode; - char* flowChars; //length depends on number flow reads - char* keySequence; //length depends on key length -}; -/**********************************************************/ -struct Header { - unsigned short headerLength; - unsigned short nameLength; - unsigned int numBases; - unsigned short clipQualLeft; - unsigned short clipQualRight; - unsigned short clipAdapterLeft; - unsigned short clipAdapterRight; - char* name; //length depends on nameLength -}; -/**********************************************************/ -struct seqRead { - vector flowgram; - vector flowIndex; - char* bases; - vector qualScores; -}; /**********************************************************/ class SffInfoCommand : public Command { public: SffInfoCommand(string); - ~SffInfoCommand(); - int execute(); - void help(); + SffInfoCommand(); + ~SffInfoCommand(){} -private: - string sffFilename, outputDir; - vector filenames, outputNames; - bool abort; + vector setParameters(); + string getCommandName() { return "sffinfo"; } + string getCommandCategory() { return "Sequence Processing"; } - int extractSffInfo(string, string); - int readCommonHeader(ifstream&, CommonHeader*&); - int readHeader(ifstream&, Header*&); - int readSeqData(ifstream&, seqRead*&, int, int); + string getHelpString(); + string getOutputPattern(string); + string getCitation() { return "http://www.mothur.org/wiki/Sffinfo"; } + string getDescription() { return "extract sequences reads from a .sff file"; } + + int execute(); + void help() { m->mothurOut(getHelpString()); } + +private: + string sffFilename, sfftxtFilename, outputDir, accnosName, currentFileName, oligosfile, noMatchFile, groupfile; + vector filenames, outputNames, accnosFileNames, oligosFileNames, groupFileNames; + bool abort, fasta, qual, trim, flow, sfftxt, hasAccnos, hasOligos, hasGroup; + int mycount, split, numFPrimers, numLinkers, numSpacers, pdiffs, bdiffs, ldiffs, sdiffs, tdiffs, numNoMatch; + set seqNames; + map barcodes; + map primers; + GroupMap* groupMap; + vector linker, spacer, primerNameVector, barcodeNameVector, revPrimer; + vector > numSplitReads; + vector > filehandles; + vector > filehandlesHeaders; + + //extract sff file functions + int extractSffInfo(string, string, string); + int readCommonHeader(ifstream&, CommonHeader&); + int readHeader(ifstream&, Header&); + bool readSeqData(ifstream&, seqRead&, int, Header&); + int decodeName(string&, string&, string&, string); + bool readOligos(string oligosFile); + bool readGroup(string oligosFile); - int printCommonHeader(ofstream&, CommonHeader*, bool); //bool is debug mode - int printHeader(ofstream&, Header*, bool); - int printSeqData(ofstream&, seqRead*, bool); - + int printCommonHeader(ofstream&, CommonHeader&); + int printHeader(ofstream&, Header&); + int printSffTxtSeqData(ofstream&, seqRead&, Header&); + int printFlowSeqData(ofstream&, seqRead&, Header&); + int printFastaSeqData(ofstream&, seqRead&, Header&); + int printQualSeqData(ofstream&, seqRead&, Header&); + int readAccnosFile(string); + int parseSffTxt(); + bool sanityCheck(Header&, seqRead&); + int adjustCommonHeader(CommonHeader); + int findGroup(Header header, seqRead read, int& barcode, int& primer); + int findGroup(Header header, seqRead read, int& barcode, int& primer, string); + string reverseOligo(string oligo); + + //parsesfftxt file functions + int parseHeaderLineToInt(ifstream&); + vector parseHeaderLineToFloatVector(ifstream&, int); + vector parseHeaderLineToIntVector(ifstream&, int); + string parseHeaderLineToString(ifstream&); }; /**********************************************************/