]> 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 0e242afa2f3eab6e53b1d8927c1658aecee97fc6..b304e485c1270aba1b4b761dc9e7b66af54dcfcf 100644 (file)
  */
 
 #include "command.hpp"
+#include "groupmap.h"
+#include "oligos.h"
+#include "trimoligos.h"
 
-
-/**********************************************************/
-struct CommonHeader {
-       unsigned int magicNumber;
-       string version;
-       unsigned long int 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() { }
-};
-/**********************************************************/
-struct Header {
-       unsigned short headerLength;
-       unsigned short nameLength;
-       unsigned int numBases;
-       unsigned short clipQualLeft;
-       unsigned short clipQualRight;
-       unsigned short clipAdapterLeft;
-       unsigned short clipAdapterRight;
-       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;
-       string bases;
-       vector<unsigned int> qualScores;
-       
-       seqRead() { } 
-       ~seqRead() { } 
-};
 /**********************************************************/
 
 class SffInfoCommand : public Command {
@@ -69,24 +27,35 @@ public:
        vector<string> setParameters();
        string getCommandName()                 { return "sffinfo";                                     }
        string getCommandCategory()             { return "Sequence Processing";         }
-       string getHelpString(); 
        
+       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;
-       vector<string> filenames, outputNames, accnosFileNames;
-       bool abort, fasta, qual, trim, flow, sfftxt, hasAccnos;
-       int mycount;
+       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);
+       int extractSffInfo(string, string, string);
        int readCommonHeader(ifstream&, CommonHeader&);
        int readHeader(ifstream&, Header&);
-       int readSeqData(ifstream&, seqRead&, int, int);
+       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&); 
        int printHeader(ofstream&, Header&);
@@ -96,7 +65,12 @@ private:
        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);