X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=sffinfocommand.h;h=5ec6e72239d0772548ce10f584ebccb435230d25;hb=372fb21ea66ced432b109225851a1b80ef0491a3;hp=2385d588fce9c4b03ac77d28203954cb3c19b028;hpb=956cdff34f2d609a7736838b1631cd7957580b8b;p=mothur.git diff --git a/sffinfocommand.h b/sffinfocommand.h index 2385d58..5ec6e72 100644 --- a/sffinfocommand.h +++ b/sffinfocommand.h @@ -12,24 +12,23 @@ #include "command.hpp" -#define SFF_MAGIC 0x2e736666 /* ".sff" */ -#define SFF_VERSION "\0\0\0\1" /**********************************************************/ struct CommonHeader { - uint32_t magicNumber; - char* version; - uint64_t indexOffset; - uint32_t indexLength; - uint32_t numReads; - uint16_t headerLength; - uint16_t keyLength; - uint16_t numFlowsPerRead; - uint8_t flogramFormatCode; - char* flowChars; //length depends on number flow reads - char* keySequence; //length depends on key length + unsigned int magicNumber; + string version; + unsigned long long indexOffset; + unsigned int indexLength; + unsigned int numReads; + unsigned short headerLength; + unsigned short keyLength; + unsigned short numFlowsPerRead; + int flogramFormatCode; + string flowChars; //length depends on number flow reads + string keySequence; //length depends on key length - CommonHeader() { magicNumber=0; indexOffset=0; indexLength=0; numReads=0; headerLength=0; keyLength=0; numFlowsPerRead=0; flogramFormatCode='s'; } + CommonHeader(){ magicNumber=0; indexOffset=0; indexLength=0; numReads=0; headerLength=0; keyLength=0; numFlowsPerRead=0; flogramFormatCode='s'; } + ~CommonHeader() { } }; /**********************************************************/ struct Header { @@ -40,16 +39,23 @@ struct Header { unsigned short clipQualRight; unsigned short clipAdapterLeft; unsigned short clipAdapterRight; - char* name; //length depends on nameLength - + string name; //length depends on nameLength + string timestamp; + string region; + string xy; + Header() { headerLength=0; nameLength=0; numBases=0; clipQualLeft=0; clipQualRight=0; clipAdapterLeft=0; clipAdapterRight=0; } + ~Header() { } }; /**********************************************************/ struct seqRead { vector flowgram; vector flowIndex; - char* bases; + string bases; vector qualScores; + + seqRead() { } + ~seqRead() { } }; /**********************************************************/ @@ -57,24 +63,59 @@ 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"; } + + 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()); } - int extractSffInfo(string, string); - CommonHeader* readCommonHeader(ifstream&); - Header* readHeader(ifstream&); - seqRead* readSeqData(ifstream&, int, int); +private: + string sffFilename, sfftxtFilename, outputDir, accnosName, currentFileName, oligosfile, noMatchFile; + vector filenames, outputNames, accnosFileNames, oligosFileNames; + bool abort, fasta, qual, trim, flow, sfftxt, hasAccnos, hasOligos; + int mycount, split, numFPrimers, numLinkers, numSpacers, pdiffs, bdiffs, ldiffs, sdiffs, tdiffs; + set seqNames; + map barcodes; + map primers; + vector linker, spacer, primerNameVector, barcodeNameVector, revPrimer; + vector > numSplitReads; + vector > filehandles, filehandlesHeaders; + + //extract sff file functions + int extractSffInfo(string, string, string); + int readCommonHeader(ifstream&, CommonHeader&); + //int readHeader(ifstream&, Header&); + int readSeqData(ifstream&, seqRead&, int, Header&); + int decodeName(string&, string&, string&, string); + bool readOligos(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); + string reverseOligo(string oligo); + + //parsesfftxt file functions + int parseHeaderLineToInt(ifstream&); + vector parseHeaderLineToFloatVector(ifstream&, int); + vector parseHeaderLineToIntVector(ifstream&, int); + string parseHeaderLineToString(ifstream&); }; /**********************************************************/