]> git.donarmstrong.com Git - mothur.git/blobdiff - sffinfocommand.h
added oligos class. added check orient parameter to trim.flows, sffinfo, fastq.info...
[mothur.git] / sffinfocommand.h
index 6e9d87c30d0898e0b6027bb5d3e4a22bfaa388bd..b304e485c1270aba1b4b761dc9e7b66af54dcfcf 100644 (file)
  */
 
 #include "command.hpp"
+#include "groupmap.h"
+#include "oligos.h"
+#include "trimoligos.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<unsigned short> flowgram;
-       vector<unsigned int> flowIndex;
-       char* bases;
-       vector<unsigned int> qualScores;
-};
 /**********************************************************/
 
 class SffInfoCommand : public Command {
        
 public:
        SffInfoCommand(string);
-       ~SffInfoCommand();
-       int execute();
-       void help();
+       SffInfoCommand();
+       ~SffInfoCommand(){}
        
-private:
-       string sffFilename, outputDir;
-       vector<string> filenames, outputNames;
-       bool abort;
+       vector<string> 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<string> filenames, outputNames, accnosFileNames, oligosFileNames, groupFileNames;
+       bool abort, fasta, qual, trim, flow, sfftxt, hasAccnos, hasOligos, hasGroup, reorient, pairedOligos;
+       int mycount, split, numBarcodes, numFPrimers, numLinkers, numSpacers, numRPrimers, pdiffs, bdiffs, ldiffs, sdiffs, tdiffs, numNoMatch;
+       set<string> seqNames;
+    GroupMap* groupMap;
+    vector<vector<int> > numSplitReads;
+    vector<vector<string> > filehandles;
+    vector<vector<string> > filehandlesHeaders;
+    Oligos* oligosObject;
+    
+       //extract sff file functions
+       int extractSffInfo(string, string, string);
+       int readCommonHeader(ifstream&, CommonHeader&);
+       int readHeader(ifstream&, Header&);
+       bool readSeqData(ifstream&, seqRead&, int, Header&, TrimOligos*&, TrimOligos*&);
+       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, TrimOligos*&, TrimOligos*&);
+    int findGroup(Header header, seqRead read, int& barcode, int& primer, string);
+    string reverseOligo(string oligo);
+    
+       //parsesfftxt file functions
+       int parseHeaderLineToInt(ifstream&);
+       vector<unsigned short> parseHeaderLineToFloatVector(ifstream&, int);
+       vector<unsigned int> parseHeaderLineToIntVector(ifstream&, int);
+       string parseHeaderLineToString(ifstream&);
 };
 
 /**********************************************************/