]> git.donarmstrong.com Git - mothur.git/blobdiff - sffinfocommand.h
removed parse.sff command and made its functionality part of sffinfo command. fixed...
[mothur.git] / sffinfocommand.h
index 6e9d87c30d0898e0b6027bb5d3e4a22bfaa388bd..d98edbd3e04f0213a24ed51471d09aab1b74d46a 100644 (file)
 
 #include "command.hpp"
 
-#define SFF_MAGIC   0x2e736666 /* ".sff" */
-#define SFF_VERSION "\0\0\0\1"
 
 /**********************************************************/
 struct CommonHeader {
        unsigned int magicNumber;
-       char* version;
+       string 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
+       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() { }
 };
 /**********************************************************/
 struct Header {
@@ -38,14 +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<unsigned short> flowgram;
        vector<unsigned int> flowIndex;
-       char* bases;
+       string bases;
        vector<unsigned int> qualScores;
+       
+       seqRead() { } 
+       ~seqRead() { } 
 };
 /**********************************************************/
 
@@ -53,24 +63,43 @@ class SffInfoCommand : public Command {
        
 public:
        SffInfoCommand(string);
+       SffInfoCommand();
        ~SffInfoCommand();
+       vector<string> getRequiredParameters();
+       vector<string> getValidParameters();
+       vector<string> getRequiredFiles();
+       map<string, vector<string> > getOutputFiles() { return outputTypes; }
        int execute();
        void help();
        
 private:
-       string sffFilename, outputDir;
-       vector<string> filenames, outputNames;
-       bool abort;
+       string sffFilename, sfftxtFilename, outputDir, accnosName;
+       vector<string> filenames, outputNames, accnosFileNames;
+       bool abort, fasta, qual, trim, flow, sfftxt, hasAccnos;
+       set<string> seqNames;
+       map<string, vector<string> > outputTypes;
        
+       //extract sff file functions
        int extractSffInfo(string, string);
-       int readCommonHeader(ifstream&, CommonHeader*&);
-       int readHeader(ifstream&, Header*&);
-       int readSeqData(ifstream&, seqRead*&, int, int);
+       int readCommonHeader(ifstream&, CommonHeader&);
+       int readHeader(ifstream&, Header&);
+       int readSeqData(ifstream&, seqRead&, int, int);
+       int decodeName(string&, string&, string&, string);
+       
+       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();
        
-       int printCommonHeader(ofstream&, CommonHeader*, bool); //bool is debug mode
-       int printHeader(ofstream&, Header*, bool);
-       int printSeqData(ofstream&, seqRead*, bool);
-               
+       //parsesfftxt file functions
+       int parseHeaderLineToInt(ifstream&);
+       vector<unsigned short> parseHeaderLineToFloatVector(ifstream&, int);
+       vector<unsigned int> parseHeaderLineToIntVector(ifstream&, int);
+       string parseHeaderLineToString(ifstream&);
 };
 
 /**********************************************************/